编译了查看汇编,代码如下:
//执行一次++i
009A884F mov eax,dword ptr [i] //eax = 3
009A8852 add eax,1 //eax = 4
009A8855 mov dword ptr [i],eax // i = 4
//将i 的值带入式子中运算
009A8858 mov ecx,dword ptr [i] //ecx = 4
009A885B add ecx,dword ptr [i] //ecx = 8
009A885E add ecx,dword ptr [i] //ecx = 12
009A8861 mov dword ptr [k],ecx // k = ecx = 12
//执行i++
009A8864 mov edx,dword ptr [i] // edx = 4
009A8867 add edx,1 // edx = 5
009A886A mov dword ptr [i],edx // i = 5
//执行i++
009A886D mov eax,dword ptr [i] // eax = 5
009A8870 add eax,1 // eax = 6;
009A8873 mov dword ptr [i],eax // i = 6;
从上面的代码看出,在运算时先执行了++i这个式子,然后将i的值带入式子中计算,最后才计算i++。所以说++i你可以看成是一个在带入式子之前的自增函数,而i++则是所有运算完成后再运算的自增函数。所有运算过程可以这么来看:
计算有几次++i,得到i的值.
将i的值带入运算式子中计算k的结果
计算i++;得到i的最终结果