求助!关于+++的问题
x=y=7;z=x+++y;
得出的结果是14,而我认为应该是15.因为x先自加一变成8,再加上y结果就是15,可为什么VC++6.0编译出来的结果是14呢?困惑中!求解!:( 编译器的设置问题,我这边用VC6输出是15. 谢谢小甲鱼老师! 我的vc输出来是14,来看下对应的汇编指令吧
5: int x,y,z;
6: x=y=7;
00401028 mov dword ptr ,7
0040102F mov eax,dword ptr
00401032 mov dword ptr ,eax
7: z=x+++y;
00401035 mov ecx,dword ptr
00401038 add ecx,dword ptr //把x和y相加结果放入ecx中
0040103B mov dword ptr ,ecx //ebp-0ch处存放的是z变量的值
0040103E mov edx,dword ptr //x放入edx中
00401041 add edx,1//x自加
00401044 mov dword ptr ,edx//结果是x=x+1了
8: printf("%d",z);
00401047 mov eax,dword ptr
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啦!!!!!!
页:
[1]