<分区>
第一部分:
i=j=k=1;
m = ++i && ++j || ++k;
printf("%d, %d, %d, %d\n", i, j, k, m);
输出:2, 2, 1, 1
第一部分简单易懂,这里++i && ++j
首先执行,这是真的(并且增加 i 和 j 的值)所以不需要检查 OR 操作的下一部分(不需要增加 k 的值)。
第二部分:
i=j=k=1;
m = ++i || ++j && ++k;
printf("%d, %d, %d, %d\n", i, j, k, m);
输出:2, 1, 1, 1
第二部分容易理解,这里++i || ++j
先执行,其中++i
为真(并且增加了 i
的值,因为 OR 操作所以不需要增加 j
的值)。接下来在这里执行AND操作应该是k=2
的增量值(但仍然是 k 打印 1 的值)。
亲爱的利他主义者,请解释一下第二部分发生了什么。