我在学习C中的逻辑运算符和条件时遇到了这个问题。
#include <stdio.h>
int main() {
int x = 3;
int y = 2;
int z = 3;
printf("Result #4 = %d\n", x++ <= 3 || y++ >= 2 && z++ != 3);
printf("x: %d y: %d z: %d\n", x, y, z);
return 0;
}
输出:
Result #4 = 1
x: 4 y: 2 z: 3
我不明白输出的最后一行。 x、y、z 的值与我的理解不符。
这是我的想法。
我试图找到该问题的参考教科书或工作表,但我找不到。我在 StackOverflow 上做了一些研究,我不认为这是一种短路情况。如果是的话,我不明白为什么。
我能想到的唯一解释是 x 值将实现副作用(x 递增),因为它被评估为 true,而 OR 语句的其余部分不会有副作用,因为它被评估为 false ,因此 y 和 z 不会增加。是这样吗?
表达式
将被计算为:x++ <= 3 || y++ >= 2 && z++ != 3
。x++ <= 3 || (y++ >= 2 && z++ != 3)
如果您用括号来思考,那么为什么您只在右侧使用它们而不在另一侧使用它们?该表达式将被评估为
(x++ <= 3) || (y++ >= 2 && z++ != 3)
。
为什么你认为首先评估右侧?