| 
 | 
 
 
发表于 2014-8-21 10:55:30
|
显示全部楼层
 
 
 
 
i++,编译器是先将i的值放到一个寄存器里面,然后计算的结果给p,寄存器再执行++过程, 
++j是先把前两个++算出来然后再得知和后面的算 
5:       int i=5,j=5,p=0,q=0; 
00401028   mov         dword ptr [ebp-4],5 
0040102F   mov         dword ptr [ebp-8],5 
00401036   mov         dword ptr [ebp-0Ch],0 
0040103D   mov         dword ptr [ebp-10h],0 
6:       p=(i++)+(i++)+(i++); 
00401044   mov         eax,dword ptr [ebp-4] 
00401047   add         eax,dword ptr [ebp-4] 
0040104A   add         eax,dword ptr [ebp-4] 
0040104D   mov         dword ptr [ebp-0Ch],eax 
00401050   mov         ecx,dword ptr [ebp-4] 
00401053   add         ecx,1 
00401056   mov         dword ptr [ebp-4],ecx 
00401059   mov         edx,dword ptr [ebp-4] 
0040105C   add         edx,1 
0040105F   mov         dword ptr [ebp-4],edx 
00401062   mov         eax,dword ptr [ebp-4] 
00401065   add         eax,1 
00401068   mov         dword ptr [ebp-4],eax 
7:       q=(++j)+(++j)+(++j); 
0040106B   mov         ecx,dword ptr [ebp-8] 
0040106E   add         ecx,1 
00401071   mov         dword ptr [ebp-8],ecx 
00401074   mov         edx,dword ptr [ebp-8] 
00401077   add         edx,1 
0040107A   mov         dword ptr [ebp-8],edx 
0040107D   mov         eax,dword ptr [ebp-8] 
00401080   add         eax,dword ptr [ebp-8] 
00401083   mov         ecx,dword ptr [ebp-8] 
00401086   add         ecx,1 
00401089   mov         dword ptr [ebp-8],ecx 
0040108C   add         eax,dword ptr [ebp-8] 
0040108F   mov         dword ptr [ebp-10h],eax 
 
你要学会看反汇编 
这个问题是编译器的问题,不同机器运行结果可能不一样,这个问题没有必要深究 
在编写程序的时候一般不要去用i++和++i的区别就是不要把他们写在一个含多个表达式的运算表达式里面 
可移植性不强,只把他作为一条语句使用就行 |   
 
 
 
 |