不理解陈述的界限

Hol*_*ola 0 c

这是代码

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

并输出:-2,2,0,1

但我不明白 m = ++i||++j&&++k;它是如何被执行的.有人请解释一下.谢谢!

Iga*_* S. 6

最初你有4个变量:

  • i = -3
  • j = 2
  • k = 0
  • m未初始化

m = ++i||++j&&++k;从左到右执行.所以第一个是++i- 我建议阅读i ++和++ i之间差异 - 在这种情况下i增加1并变为i = -2

-2是true表达式,因此m变为1并且不计算表达式的其余部分.因为true or anything else无论如何总是如此.最后的结果:

  • i = -2(增加)
  • j = 2(不变)
  • k = 0(不变)
  • m是1(真)