[英]Why does int's value change?
我有这个C代码:
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;
}
输出:
a is of value 5 before first if statement.
a=0 is not true.
a is of value 0 after first if statement.
a==0 is true.
Program ended with exit code: 0
我不明白为什么int值在第一个语句中仍被识别为5,但在第二个if之前更改为0,或者为什么它会发生变化?
当你执行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
!
在第一个如果您需要使用“==”。
if(a == 0) {
in if (a = 0)
你的赋值0
到a
。
要做比较,你应该在if (a == 0)
(所以使用double ==
)
if (a = 0)
在上面的if
语句中,第一个0
被赋给变量a
。 然后评估条件。
因为a
现在保持值0
,它被评价为false
以及相应的else
块被执行。
在C语言中, true
由任何不等于0
数值表示, false
由0
表示。
我不明白为什么int值在第一个语句中仍被识别为5,但在第二个if之前更改为0,或者为什么它会发生变化?
因为,在执行第一个if语句之后, a
值为0
。 因此,当评估第二个if
语句时, a
的值为0
,因此条件if (a == 0)
计算结果为true
。
0是假的,即。 不对。
这就是为什么第一个if语句的行为与它一样。
并且a = 0将0分配给a,这是之后其值的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.