鱼C论坛

 找回密码
 立即注册
查看: 2873|回复: 3

求助!关于+++的问题

[复制链接]
发表于 2011-3-23 00:03:05 | 显示全部楼层 |阅读模式

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

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

x
x=y=7;
   z=x+++y;
得出的结果是14,而我认为应该是15.因为x先自加一变成8,再加上y结果就是15,可为什么VC++6.0编译出来的结果是14呢?困惑中!求解!:(
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-3-23 11:34:48 | 显示全部楼层
编译器的设置问题,我这边用VC6输出是15.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-3-24 23:01:03 | 显示全部楼层
谢谢小甲鱼老师!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2014-3-17 12:06:13 | 显示全部楼层
我的vc输出来是14,来看下对应的汇编指令吧
5:        int x,y,z;
6:            x=y=7;
00401028   mov         dword ptr [ebp-8],7
0040102F   mov         eax,dword ptr [ebp-8]
00401032   mov         dword ptr [ebp-4],eax
7:            z=x+++y;
00401035   mov         ecx,dword ptr [ebp-4]
00401038   add         ecx,dword ptr [ebp-8]   //把x和y相加结果放入ecx中
0040103B   mov         dword ptr [ebp-0Ch],ecx //ebp-0ch处存放的是z变量的值
0040103E   mov         edx,dword ptr [ebp-4] //x放入edx中
00401041   add         edx,1//x自加
00401044   mov         dword ptr [ebp-4],edx//结果是x=x+1了
8:        printf("%d",z);
00401047   mov         eax,dword ptr [ebp-0Ch]
0040104A   push        eax
0040104B   push        offset string "%d" (0042201c)
00401050   call        printf (00401080)
00401055   add         esp,8
9:
10:   }
哈哈,当你输出x的时候你发现结果是8,原来vc是这样理解的
z=(x++)+y,为什么会如此理解,这下你明白了吧,先是7+7,.等赋值给z之后,然后是x++因为是后加啊,!!!!!!!!!!!而为什么不是z=x+(++y)呢,因为编译的时候是从左向右边扫描的,当发现,x后面有两个++就匹配x啦!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 21:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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