为何代码中变量a、b被前置自增,变量c却始终未发生自增?
为什么你的C代码里c的值始终不变?
嘿,这个问题其实是C语言里**短路求值(Short-circuit Evaluation)**的经典场景,咱们一步步拆解开就明白啦!
先把你的代码贴出来方便分析:
#include <stdio.h> void main() { int a = 5, b = -7, c = 0, d; d = ++a && ++b || ++c; printf("%d%d%d%d", a, b, c, d); }
核心原因就在d = ++a && ++b || ++c;这行代码里,咱们分步骤拆解逻辑:
- 首先记住:C语言中
&&的优先级比||高,所以这行代码会先计算++a && ++b,再把结果和++c做||运算。 - 第一步计算
++a:a初始值是5,前置自增后a变成6,这个表达式的返回值是6(非零,在逻辑判断里视为「真」)。 - 因为
&&要求左右两边都为真才返回真,所以左边是真的情况下,必须继续计算右边的++b:b初始是-7,前置自增后变成-6,返回值是-6(同样非零,视为「真」)。 - 到这里,
++a && ++b的结果就是「真」(在C语言里用整数1表示)。 - 接下来是
||运算:||的规则是只要左边为真,整个表达式的结果就已经确定是真了,右边的表达式会直接跳过不执行——这就是「短路求值」的核心! - 所以
++c根本没机会运行,不管你初始化c是什么值,它都会保持原样。
最后补充一句:你运行代码后d的值应该是1,因为整个逻辑表达式的结果是真,C语言里用1表示逻辑真。
内容的提问来源于stack exchange,提问作者MarcoM
相关产品推荐
相关产品推荐

