为什么int的值会改变?

时间:2018-08-15 19:47:25

标签: c

我有这个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,或者为什么它根本改变了?

5 个答案:

答案 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

在这种情况下,由于a0,因此它的值为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的数值表示,false0表示。

  

我不明白为什么int值仍被识别为5   第一条语句,但是在第二条语句之前或之后更改为0的原因   呢?

因为在执行第一个if语句后,a的值为0。因此,当对第二条if语句求值时,a的值为0,因此条件if (a == 0)的求值为true

答案 4 :(得分:1)

0为假,即。不是。

这就是为什么第一个if语句的行为类似于它的原因。

a = 0时将0赋给a,这就是其后值的原因。