我有一个我无法理解的问题。a的输出是6,b是-6,但是c保持不变,不管我用什么变量初始化它。
#include <stdio.h>
void main()
{
int a = 5, b = -7, c = 0, d;
d = ++a && ++b || ++c;
printf("\n%d%d%d%d", a, b, c, d);
}
谢谢您。
最佳答案
这是短路行为,也是C语言中故意的一部分。
当C找到形式的表达式时:
(expression A) || (expression B)
表达式A的计算结果是
TRUE
,而表达式B是什么并不重要!它可以是TRUE
,也可以是FALSE
,但由于TRUE
,整体表达式仍然是||
。因此,C语言甚至不需要计算下半部分:表达式B。该部分只是被跳过,因此
++c
被跳过,并且从不计算。仅对于kicks,如果您想更改此程序以使
++c
发生,请将b
设置为-1
,这样当您拥有++b
时,它将变为0 (false)
。int a = 5, b = -1, c = 0, d;
现在,表达式将按以下方式计算:
d = (6 && 0) || [ lazy, short-circuit evaluation ];
d = 0 || [ second expression is now required! ];
d = 0 || 1;
d = 1;
输出:
6011
关于c - 为什么前两个变量(a,b)是预先增加的,而第三个变量不是(c)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49908704/