为什么下述C语言代码运行后printf输出d=4而非d=8
问题原因
你遇到的现象是C语言逻辑或运算符的短路求值特性导致的,具体原理如下:
- C语言中逻辑或运算符
||遵循短路求值规则:当左侧子表达式的求值结果为非0(逻辑真)时,整个逻辑或表达式的结果已经可以确定为真,右侧的子表达式会被直接跳过,不会执行。 - 你提供的代码中,
||左侧的子表达式是(c = 5),赋值表达式的返回值为赋值完成后变量c的值,也就是5,属于非0的真值,因此直接触发短路,右侧的(d = 8)全程不会运行,变量d保持初始赋值的4不变,所以printf输出d为4。
对应代码说明:
#include <stdio.h> int main() { int a = 3, b = 4, c = 3, d = 4; int y = (c = 5) || (d = 8); // 此处||左侧为真,右侧d=8被短路不执行 printf("a=%d, b=%d, c=%d, d=%d\n", a, b, c, d); }
内容的提问来源于stack exchange,提问作者steamsid007
相关产品推荐
相关产品推荐

