繁体   English   中英

为什么int的值会改变?

[英]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

在这种情况下,由于a0 ,因此计算结果为false 这就是为什么你最终在第一部分的else部分,并在第二部分(a == 0)评估为true

在第一个如果您需要使用“==”。

if(a == 0) {

in if (a = 0)你的赋值0a

要做比较,你应该在if (a == 0) (所以使用double ==

if (a = 0) 

在上面的if语句中,第一个0被赋给变量a 然后评估条件。

因为a现在保持值0 ,它被评价为false以及相应的else块被执行。

在C语言中, true由任何不等于0数值表示, false0表示。

我不明白为什么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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM