C 程序输出复杂性

Shu*_*dol 1 c

你能解释一下为什么下面的程序会给出这样的输出吗?

#include<stdio.h>

int main()
{
    int i=-3,j=1,k=0;
    int m;
    m=++i || ++j && ++k;
    printf("i= %d\nj=%d\nk=%d\nm=%d", i,j,k,m);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

i= -2
j=1
k=0
m=1

Era*_*lon 5

由于++i本质上是true,因为它不是0,因此||不会评估其他部分,因为此时无关紧要,表达式是true。因此j并且k不会改变。true1,这就是为什么m1