我有这个C代码:
f(x)
输出:
int a = 5;
printf("a is of value %d before first if statement. \n", a);
if (a = 0) {
printf("a=0 is true. \n");
}
else{
printf("a=0 is not true. \n");
}
printf("a is of value %d after first if statement. \n", a);
if (a == 0){
printf("a==0 is true. \n");
}
else{
printf("a==0 is not true. \n");
}
return 0;
}
我不明白为什么int值在第一条语句中仍然被识别为5,但是在第二条if之前变为0,或者为什么它根本改变了?
答案 0 :(得分:12)
执行if (a = 0)
时,会将变量a
设置为0
。
在C语言中,这还将计算表达式为0
。
因此,实际上,if语句分两个步骤工作。好像您这样做了:
a = 0; //assign 0 to a
if (a) { ... } //evaluate a to check for the condition
在这种情况下,由于a
为0
,因此它的值为false
。因此,您最终进入第一部分的else
,而在第二部分中,(a == 0)
的计算结果为true
!
答案 1 :(得分:5)
如果需要使用“ ==“。
if(a == 0) {
答案 2 :(得分:2)
在if (a = 0)
中为0
分配值a
。
要进行比较,您应该在if (a == 0)
中进行操作(因此使用双==
)
答案 3 :(得分:2)
if (a = 0)
在上面的if
语句中,第一个0
被分配给变量a
。然后评估条件。
由于a
现在拥有值0
,因此它的值为false
并执行了相应的else
块。
在C语言中,true
用任何不等于0
的数值表示,false
用0
表示。 >
我不明白为什么int值仍被识别为5 第一条语句,但是在第二条语句之前或之后更改为0的原因 呢?
因为在执行第一个if语句后,a
的值为0
。因此,当对第二条if
语句求值时,a
的值为0
,因此条件if (a == 0)
的求值为true
。
答案 4 :(得分:1)
0为假,即。不是。
这就是为什么第一个if语句的行为类似于它的原因。
a = 0时将0赋给a,这就是其后值的原因。