为什么k为零?

时间:2016-07-30 11:00:00

标签: c output

在下面的代码中:

#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; 运算符而被执行?

1 个答案:

答案 0 :(得分:8)

C使用短路逻辑 - 因为++i不是零,它是真的,因为它是||运算符的左侧,我们知道无论右手边是什么,都会产生真实的结果。因此,C(以及一堆类似的语言)甚至不用去评估右手边,并且很快就会恢复正常。由于++k永远不会被评估,k保持不变,并且在0语句后仍为m=++i||++j&&++k;