|
|
发表于 2011-12-1 23:52:02
|
显示全部楼层
我来解释一下吧
p = (i++)+(i++)+(i++);
q = (++j)+(++j)+(++j);
printf("%d,%d,%d,%d",p,q,i,j);
输出 应该是 18,22,8,8 疑问都集中在q的值上
反汇编后是这样,我注释写得简单些让大家都能看懂
6: q = (++j)+(++j)+(++j);
0040D4FD mov ecx,dword ptr [ebp-8] ; j=[ebp-8]=(ecx)=5
0040D500 add ecx,1 ; (ecx)=6
0040D503 mov dword ptr [ebp-8],ecx ; [ebp-8]=(ecx)=6
0040D506 mov edx,dword ptr [ebp-8] ; [ebp-8]=(edx)=6
0040D509 add edx,1 ; (edx)=7
0040D50C mov dword ptr [ebp-8],edx ; [ebp-8]=(edx)=7
0040D50F mov eax,dword ptr [ebp-8] ; [ebp-8]=(eax)=7
0040D512 add eax,dword ptr [ebp-8] ; (eax)=[ebp-8]+(eax)=14
0040D515 mov ecx,dword ptr [ebp-8] ; [ebp-8]=(ecx)=7
0040D518 add ecx,1 ; (ecx)=8
0040D51B mov dword ptr [ebp-8],ecx ; [ebp-8]=(ecx)=8
0040D51E add eax,dword ptr [ebp-8] ; (eax)=(eax)+[ebp-8]=14+8=22
0040D521 mov dword ptr [ebp-10h],eax ; q=[ebp-10h]=(eax)=22
这就是为什么是22而不是21的原因。。。vc++就是在这里搞的鬼。嘿嘿。还有什么问题吗?
|
|