c - 如何测试变量是否有效或在 C 中是否已初始化?

我正在通过哈佛的 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 以在执行“常规”处理之前启动。

相似文章

python - 无限 while 和 for loop Python

我的代码似乎陷入了无限循环。它应该遍历能量曲线,其中2个局部最小值之间的每个点都被添加到子列表teil_reaction中,然后移动到下一组点。此外,前一个子列表的最后一个点也是下一个子列表的第一个点...

随机推荐

最新文章