在下面的代码中:
#include <stdio.h>
int main(void)
{
int i=-3,j=2,k=0,m;
m=++i||++j&&++k;
printf("%d %d %d %d",i,j,k,m);
}
输出:
-2 2 0 1
为什么k = 0?因为我认为 k 因&amp;&amp; 运算符而被执行?
答案 0 :(得分:8)
C使用短路逻辑 - 因为++i
不是零,它是真的,因为它是||
运算符的左侧,我们知道无论右手边是什么,都会产生真实的结果。因此,C(以及一堆类似的语言)甚至不用去评估右手边,并且很快就会恢复正常。由于++k
永远不会被评估,k
保持不变,并且在0
语句后仍为m=++i||++j&&++k;
。