为何这段C语言代码中x、y未递减?输出为2 2的原因
问题解析:为什么代码输出是22(而非0 0)
先明确两个核心知识点:
- 后置自增运算符
x++:先返回变量当前值,再将变量加1 - 后置自减运算符
x--:先返回变量当前值,再将变量减1
现在一步步拆解代码的执行流程:
变量初始化
int x = 1, y = 1;此时
x=1,y=1。if条件判断
if(x++ == y++)- 第一步:取
x的当前值1、y的当前值1,比较1 == 1,结果为真。 - 第二步:完成自增操作,
x变为2,y变为2。 - 因为条件为真,代码会执行
if分支的printf,而非else分支(你认为else被执行可能是误解了运行结果,或是代码实际有改动)。
- 第一步:取
if分支的printf执行
printf("%d%d", x--, y--);- 第一步:取
x的当前值2、y的当前值2传递给printf,所以输出22。 - 第二步:完成自减操作,
x变为1,y变为1。
- 第一步:取
你预期输出0 0的误区
你混淆了后置与前置运算符的逻辑:
- 前置运算符
++x是先修改变量再返回值,而后置x++是先返回当前值再修改变量。 - 你误以为
x--会先把x减到0再输出,但实际上是先输出当前值2,再将x减到1。
验证printf中递减操作是否执行
如果在原代码的printf后添加一行:
printf("%d %d", x, y);
你会看到输出1 1,这证明x--和y--确实执行了,只是执行顺序是先取值输出,再修改变量。
内容的提问来源于stack exchange,提问作者Generations01
相关产品推荐
相关产品推荐

