我正在参加一个练习编程测验,但我不确定为什么这个程序会打印出 -1:
#include <stdio.h>
int main()
{
int x = 1;
if (x-- && x-- && x--)
{
printf("%d\n", x);
} else
{
printf("%d\n", x);
}
return 0;
}
最佳答案
在 C 中,&&
和 ||
等逻辑运算符使用 short-circuit evaluation 求值。 ,这实质上意味着当一个语句被保证为 true 或 false 时,语句中的任何后续表达式都不会被计算。
在您的程序中,只需评估前两个条件即可确定整个语句为假。不计算第三个表达式。
if (x-- && /* evaluates true, and then x is decremented */
x-- && /* evaluates false, and then x is decremented */
x--) /* this is not executed */
因为这是一系列 AND
语句,从逻辑上讲,只需要一个表达式为假,整个语句就为假。当第二个表达式被确定为假时,没有必要通过评估语句的其余部分来浪费资源,因此执行 else
block 。
这导致 x
的最终值为 -1
,而不是 -2
。
关于c - 为什么这个 C 程序打印输出 -1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32262082/