当我偶然发现这种“奇怪”的行为时,我正试图在另一个函数中调试我的代码。
#include <stdio.h>
#define MAX 20
int main(void) {
int matrix[MAX][MAX] = {{0}};
return 0;
}
如果我在 return 0;
行上设置断点,然后使用 Code::Blocks 查看局部变量,矩阵不会完全用零填充。
第一行是,但数组的其余部分只包含随机垃圾。
我知道我可以做一个双 for
循环来手动将所有内容初始化为零,但是 C
标准不应该用 {{0}}
初始化器?
也许是因为漫长的一天,我累了,但我可以发誓我知道这一点。
我尝试使用不同的标准进行编译(使用 Code::Blocks 捆绑的 gcc
编译器):-std=c89
、-std= c99
, std=c11
但都是一样的
有什么问题吗?你能给我解释一下吗?
编辑:
我特别询问 {{0}}
初始化程序。
我一直认为它会将所有列和所有行填充为零。
编辑 2:
我特别讨厌 Code::Blocks
及其捆绑的 GCC
。其他评论说该代码适用于不同的平台。但为什么它对我不起作用? :/
谢谢。
最佳答案
我想通了。
即使编译器上没有任何优化标志,调试器信息也是错误的..
所以我用两个 for
循环打印出这些值并且它被正确初始化,即使调试器另有说明(奇怪)。
谢谢大家的意见
关于c - 矩阵未在声明中填零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33640600/