我有一个我无法理解的问题。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/

10-14 14:48
查看更多