为什么k为零?

Mar*_*rts -2 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);
}
Run Code Online (Sandbox Code Playgroud)

输出:
-2 2 0 1

为什么k = 0?因为我认为k也因为&&运算符而被执行?

Mur*_*nik 8

C使用短路逻辑 - 因为++i它不是零,它是真的,因为它是||运算符的左侧,我们知道无论右侧是什么,它都会产生真实的结果.因此,C(以及一堆类似的语言)甚至不打算评估右侧,并且很快就会返回true.因为++k永远不会被评估,所以k仍然保持不变,并且仍然0m=++i||++j&&++k;声明之后.