我正在通过哈佛的 cs50 课程从头开始学习 C。我得到了一个以这种方式初始化的数组:
int stuff[9][9];
现在我必须处理它。
我想检查数组的每个项目是否存在:如果不存在,则生成 stuff[i][j] = 0
,否则,生成 stuff[i][j]++
但我正在搜索没有导致如何检查我正在操作的变量是否存在或是否有效或其他:没有 !!stuff[i][j]
,也没有一些 typeof stuff[i][j]
或比较 if (stuff[i][j] == 'undefined')
或 NULL
或我可以使用的任何变体。 ..
那么,如何检查声明的变量是否尚未初始化?
更新
我对此进行了测试:
int a[3];
for(int i = 0; i < 3; i++)
{
a[i] = a[i] || 0;
}
for(int i = 0; i < 3; i++)
{
printf("a[%i] -> %i\n", i, a[i]);
}
因此,如果 a[i]
不存在(即没有分配给它的 value),它将接收 value 0
。这是 printf
的输出:
a[0] -> 1
a[1] -> 1
a[2] -> 0
这很好,因为这种方法没有引发错误,但是......这些数字是多少?
回答1
假设上述数组是局部变量而不是全局变量,则数组的 values 未初始化,实际上您无法检查变量是否未初始化,因为简单地尝试读取此类变量可能会触发 https://en.wikipedia.org/wiki/Undefined_behavior。
听起来您希望所有数组元素都以 value 0 开头。最简单的方法是这样初始化数组:
int stuff[9][9] = {{ 0 }};
其中显式将元素 [0][0]
设置为 0,并将所有其他元素隐式设置为 0。
或者,您可以创建一个循环以将所有 values 设置为 0 以在执行“常规”处理之前启动。