C语言自增运算代码输出疑问:为何h的值是85而非84?
C语言代码变量h输出结果解析
先看你的代码:
#include<stdio.h> void main() { int g = 83; int h = (g++, ++g); printf("%d", h); }
你困惑的核心是对g++的执行时机理解有误,下面直接拆解逻辑:
(g++, ++g)是逗号表达式,C语言里逗号表达式的规则是:从左到右依次计算每个子表达式,整个表达式的最终结果是最后一个子表达式的返回值。- 具体执行步骤:
- 初始状态:
g = 83 - 执行第一个子表达式
g++:这是后置自增,先返回g当前的值(83),执行完这个子表达式后立刻把g的值加1,此时g = 84 - 执行第二个子表达式
++g:这是前置自增,先把g的值加1(此时g = 85),再返回这个新值(85) - 逗号表达式取最后一个子表达式的返回值85赋值给h,所以最终输出85
- 初始状态:
你之前误以为g++要等到分号后才递增变量,实际是:后置自增的"返回旧值"和"变量递增"是两个动作,返回旧值后立刻就会完成变量递增,不是等到整个语句结束。
内容的提问来源于stack exchange,提问作者Tushar K. Sengar
相关产品推荐
相关产品推荐

