如何检查值是否为零或尚未给出?
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/providedn");} // catching points[2]
}
在这里,您如何区分points[1]
和points[2]
?
你如何区分零和未设置"和"你如何区分点[1]和点[2]"暗示了误解。 在这种情况下,points[2]
不会初始化或分配。 它未指定为任何合法值。
if(points[i] ...
是 UB 时i==2
.
在阅读之前分配points[2]
。
如何在 C 中区分零和未初始化?
代码通过跟踪先前初始化或分配的元素来实现此目的。 在这种情况下,仅分配了points[0], points[1]
。 代码不会尝试通过读取points[i]
进行区分。
一个常见的习惯用法是先将整个对象填零:
int points[3] = { 0 };
没有初始化就没有通用的方法。 在某些情况下,例如 vs(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,否则它可以是变量类型范围内的任何值。您可以做的是分配一个哨兵值作为指标。
例如,如果您确定变量的值将始终为正数,那么您可以分配一个负数来跟踪变量是否更改