鱼C论坛

 找回密码
 立即注册
查看: 2602|回复: 7

printf问题

[复制链接]
发表于 2016-6-21 09:08:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在《小甲鱼零基础入门学习C语言》中“第三章  顺序程序设计”PPT第18页有如下格式输入输出问题:


请问有大神能分析结果为何是这样吗?
QQ截图20160621090716.png
QQ图片20160621090724.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-6-21 09:39:36 | 显示全部楼层
自增和自减,这个是不同的编译器运算会有不同的结果,你可以尝试,把每一个都拿出来单独输出,这样就会有你的答案了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-21 09:54:46 | 显示全部楼层
编译器的问题么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-21 11:28:28 | 显示全部楼层
不错支持
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-21 13:45:52 | 显示全部楼层
本帖最后由 EzioA 于 2016-6-21 13:47 编辑

反汇编之后得出这样的结论,如图。
在内存里面,i的值以dword的形式(64位)被存储在ebp-4的地方,也就是图的最下面的位置。
首先,C语言的参数传递是从右往左的,并且用到栈空间。图的上方就是栈空间中使用到的位置。

第一个参数为-i--,从ebp-4的位置取出i,算出-i的值后,将-i存储在ebp-8的位置,然后把ebp-8的数据送到栈里面,也就是上半部分中最下面的-i。

第二个参数为-i++,从ebp-4的位置取出i,算出-i的值,存储在ebp-0c H的位置,然后将ebp-0c H的数据送到栈里面,也就是上半部分中第二个-i。

第三个参数为i--,从ebp-4的位置取出i,直接存储在ebp-10 H的位置,然后将ebp-10 H的数据送入栈,也就是上半部分的第三个数据,i。

第四个参数为i++,从ebp-4的位置取出i,直接存储在ebp-14H的位置,然后将ebp-14 H的数据送入栈,也就是上半部分的第四个数据,i。

第五个参数为--i,从ebp-4的位置取出i,计算出i-1的值,用i-1覆盖ebp-4的数据,也就是原来ebp-4位置处存储的是i,现在变成了i-1。然后取出ebp-4的数据,将之入栈,也就是上半部分第五个数据,i-1。

第六个参数为++i,从ebp-4的位置取出i-1,计算出(i-1)+1的值,然后覆盖ebp-4的数据,也就是ebp-4位置处的数据又变成了i。然后取出ebp-4的数据,入栈,也就是上半部分的第六个数据,i。

然后依次出栈:i   i-1   i   i   -i   -i
函数输出的结果也就是这个样子。

其实这样看上去,-i++和-i--这种语句最好不要使用,因为++和--的优先级比-还要高,但是在使用的时候,先使用-i的数据,才进行++和--操作。在这里,-i++和-i--作为printf()参数的时候,++和--甚至是被忽略了,函数接接收的数据只是-i和-i。
printf().png

评分

参与人数 2荣誉 +3 鱼币 +8 贡献 +1 收起 理由
屁哥 + 3 + 3 + 1 希望有一天我也能写出这样的结论
n0noper + 5 其实层主就说该编译器从右往左运算楼主就应.

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-6-22 07:59:41 | 显示全部楼层
EzioA 发表于 2016-6-21 13:45
反汇编之后得出这样的结论,如图。
在内存里面,i的值以dword的形式(64位)被存储在ebp-4的地方,也就是 ...

非常感谢,分析得很细致透彻,明白鸟~
还有后面的建议也很赞!
感谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-22 10:24:03 | 显示全部楼层
来学习下 哈哈理解能力不是很强 但是 可以看看 哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-22 15:58:36 | 显示全部楼层
我也不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 04:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表