|
发表于 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啦!!!!!! |
|