鱼C论坛

 找回密码
 立即注册
查看: 2305|回复: 6

为什么p是=22而不是=21?

[复制链接]
发表于 2017-1-21 21:06:27 | 显示全部楼层 |阅读模式

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

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

x
为什么p是=22而不是=21?
QQ图片20170121210509.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-1-21 21:11:44 | 显示全部楼层
我认为是6+7+8=21.可是它编译出来是22.想不明白。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-21 21:56:30 | 显示全部楼层
本帖最后由 GH逐风 于 2017-1-21 22:04 编辑

第一次:++b —— b = 6
第二次:++b —— b = 7
++b + ++b —— result = 7+7 = 14
第三次:++b —— b = 8
14 + ++b —— result = 22


这种是非法的,工作用这种是会被炒鱿鱼的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-21 22:13:55 | 显示全部楼层
纠结这类 ++ 问题没有意义,想知道为什么,看一下反汇编全明白了
无标题.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-23 11:02:38 | 显示全部楼层
GH逐风 发表于 2017-1-21 21:56
第一次:++b —— b = 6
第二次:++b —— b = 7
++b + ++b —— result = 7+7 = 14

那前两个为什么是7后一个为什么是8 了。这样的话应该是8+8+8?是因为编译器的问题吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-23 16:21:35 | 显示全部楼层
童物联 发表于 2017-1-23 11:02
那前两个为什么是7后一个为什么是8 了。这样的话应该是8+8+8?是因为编译器的问题吗?

你真的要纠结这个问题吗?

学过汇编语言吗?
我简单说一下

q = (a++) + (a++) + (a++);
我的编译器是这样做的
q = a + a + a;
a++;
a++;
a++;
结果是q = 15

p = (++b) + (++b) + (++b);
我的编译器是这样做的
b++;
b++;
b++;
p = b + b + b;
结果是p = 24

详情请见我上面那张图

如果你想知道你的为什么是22,把你的反汇编代码贴出来(当然你也可以自己看,自己分析^_^)
说真的,纠结这类问题没有意义^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-1-23 20:20:22 | 显示全部楼层
因为加是二元操作符,先读到++b和另一个++b,这时还没有把第一个++b的值放到eax,读完两个时,这时b的地址的值是7了,相加是14,储存在eax中,再加一个++b,就是14+8=22
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-27 19:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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