你如何区分 C 中的零和未初始化?
How do you differentiate between zero and not-initialised in C?
如何检查值是否为零或未给出?
int points[3];
points[0]=1;
points[1]=0;
for(int i=0;i<sizeof(points)/sizeof(*points);i++){
if(points[i]&&points>0){printf("Value is %d \n",points[i]);}
else if(!points[i]){printf("Value is zero \n");}
else{printf("Not set/provided\n");} // catching points[2]
}
这里,如何区分points[1]
和points[2]
?
“你如何区分零和未设置”和“你如何区分点[1]和点[2]”是一种误解。 points[2]
在这种情况下没有初始化也没有分配。未指定为任何合法值。
if(points[i] ...
是 UB 当 i==2
.
阅读前分配points[2]
。
How do you differentiate between zero and not-initialised in C?
代码通过跟踪先前初始化或分配的元素来做到这一点。在这种情况下,只分配了 points[0], points[1]
。代码不会尝试通过读取 points[i]
.
来区分
一个常见的习惯用法是先用零填充整个对象:
int points[3] = { 0 };
没有初始化就没有通用的方法。
在某些情况下比如vs中的调试模式,它们会被初始化为零,但一般情况下,c或c++引擎会将随机值设置为未初始化的变量。
您需要做的事情如下:
int points[3] = {1, 0, -1};
for (int i = 0; i < 3; i++)
{
if (points[i] > 0) printf("value: %d", points[i]);
else if (points[i] == 0) printf("value is zero");
else printf("value is not setted.");
}
C 没有找到未初始化值的功能。如果未初始化的变量是静态的或全局的,它的值将始终为 0,否则它可以是变量类型范围内的任何值。您可以做的是分配一个标记值作为指标。
例如,如果您确定变量的值始终为正,那么您可以分配一个负数来跟踪变量是否发生变化
如何检查值是否为零或未给出?
int points[3];
points[0]=1;
points[1]=0;
for(int i=0;i<sizeof(points)/sizeof(*points);i++){
if(points[i]&&points>0){printf("Value is %d \n",points[i]);}
else if(!points[i]){printf("Value is zero \n");}
else{printf("Not set/provided\n");} // catching points[2]
}
这里,如何区分points[1]
和points[2]
?
“你如何区分零和未设置”和“你如何区分点[1]和点[2]”是一种误解。 points[2]
在这种情况下没有初始化也没有分配。未指定为任何合法值。
if(points[i] ...
是 UB 当 i==2
.
阅读前分配points[2]
。
How do you differentiate between zero and not-initialised in C?
代码通过跟踪先前初始化或分配的元素来做到这一点。在这种情况下,只分配了 points[0], points[1]
。代码不会尝试通过读取 points[i]
.
一个常见的习惯用法是先用零填充整个对象:
int points[3] = { 0 };
没有初始化就没有通用的方法。 在某些情况下比如vs中的调试模式,它们会被初始化为零,但一般情况下,c或c++引擎会将随机值设置为未初始化的变量。
您需要做的事情如下:
int points[3] = {1, 0, -1};
for (int i = 0; i < 3; i++)
{
if (points[i] > 0) printf("value: %d", points[i]);
else if (points[i] == 0) printf("value is zero");
else printf("value is not setted.");
}
C 没有找到未初始化值的功能。如果未初始化的变量是静态的或全局的,它的值将始终为 0,否则它可以是变量类型范围内的任何值。您可以做的是分配一个标记值作为指标。
例如,如果您确定变量的值始终为正,那么您可以分配一个负数来跟踪变量是否发生变化