c语言中printf函数与前置后置++的过程分析

本文解析了printf函数参数从右向左遍历的原理,重点讲解后置++运算符的行为,以及在代码中的实际应用。通过实例演示,帮助读者掌握这一易错点并提升编程理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

生活总不如人内心想象的容易,需要一个探索的过程。
好了话不多说,先看下面一段代码.

int i = 0;
printf("%d %d %d",i,i++,++i);

我们可以知道printf函数参数是从右向左遍历
第一个前置++是先自增再使用,应该打印出1
第二个i++是先使用再自增,应该打印出0
第三个打印i,应该是0


我们跑一下代码看看结果

结果是2,1,2,与我们想象的太不一样了。这是为什么呢?
看一下反汇编的结果

 

 可能很多小伙伴不懂,用通俗的语言来分析这种结果,我上网查了一下资料,在vs2019里面printf函数确实是从右向左遍历参数,但从右向左遍历时不是遍历一次就打印一个参数,而是走完整个过程,统一打印最后一个值。
其中有一个特殊的运算符号,后置++,对于后置++来说,他最终不会返回整体统一返回的值,只会返回当时算到这一步时i对应的初始值。下边来逐语句分析一下。
1:设定i = 0;
2:++i,此时遍历第一个参数时,i->1
3:i++, 从第二步到第三步开始时候,i传过去的参数是2,最后这一步不会受到整体返回的影响,只会打印这个初始值1,但是i++仍旧要计算,此时i等于2
4:i,第三步传给第四部的值是3,到此所有参数遍历完毕,最后每一步都应该返回3,
但是后置++不受整体返回的影响。所以最后打印的结果为2,1,2

不妨再来个长一点的代码分析一下
 

int  i = 1;
printf("%d,%d,%d,%d,%d,%d,%d",i,i++,++i,i++,++i,i++,++i)

1:++i, i->2
2:i++, i->3,打印2
3:++i, i->4
4:i++, i->5,打印4
5:++i, i->6
6:i++, i->7,打印6
7:i,i = 7, 到此遍历结束,应该所有除了后置++的统一返回7
8:打印结果应该是7,6,7,4,7,2,7
跑一下代码试试


 

 果然如此。对此大家应该对此过程有一定的程度的掌握了,总之要记住的就是从右向左遍历完每一个参数后再统一返回,后置++不会受到统一返回的影响。
 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不熬夜不抽烟不喝酒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值