如何测试变量是否有效或是否在 C 中初始化?
how to test if a variable is valid or whether it is initialized or not in 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]
不存在(即没有分配任何值),它将接收值 0
。
这是 printf
:
的输出
a[0] -> 1
a[1] -> 1
a[2] -> 0
这很好,因为这种方法没有引发错误,但是...这些数字是多少??
假设上面的数组是局部变量而不是全局变量,数组的值是未初始化,事实上你不能 检查变量是否未初始化,因为简单地尝试读取这样的变量会触发 undefined behavior.
听起来您希望所有数组元素都以值 0 开头。最简单的方法是这样初始化数组:
int stuff[9][9] = {{ 0 }};
将元素 [0][0]
显式设置为 0,并将所有其他元素隐式设置为 0。
或者,您可以创建一个循环,将所有值设置为 0,以便在执行“常规”处理之前开始。
我正在通过哈佛的 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]
不存在(即没有分配任何值),它将接收值 0
。
这是 printf
:
a[0] -> 1
a[1] -> 1
a[2] -> 0
这很好,因为这种方法没有引发错误,但是...这些数字是多少??
假设上面的数组是局部变量而不是全局变量,数组的值是未初始化,事实上你不能 检查变量是否未初始化,因为简单地尝试读取这样的变量会触发 undefined behavior.
听起来您希望所有数组元素都以值 0 开头。最简单的方法是这样初始化数组:
int stuff[9][9] = {{ 0 }};
将元素 [0][0]
显式设置为 0,并将所有其他元素隐式设置为 0。
或者,您可以创建一个循环,将所有值设置为 0,以便在执行“常规”处理之前开始。