i++
與++i最大的區別就是:
i++:先取值後自加;
++i:先自加後取值。
執行**:
#include int main()
運用debug除錯的反彙編檢視彙編**,如下:
int main()
0016149d pop edi
0016149e pop esi
0016149f pop ebx
001614a0 add esp,0d4h
001614a6 cmp ebp,esp
001614a8 call @ilt+315(__rtc_checkesp) (161140h)
001614ad mov esp,ebp
001614af pop ebp
001614b0 ret
函式傳參過程:c++沿用c的引數傳遞方式,是從右到左傳遞的,即從第三個引數,到第二個引數,再到第乙個引數,依次執行相應操作,然後依次壓棧。
下圖為main函式中printf("%d,%d,%d\n",i++,--i,i++);
給printf函式傳參的彙編**的詳解:
(右鍵全屏看高畫質大圖)
最後printf列印的值為:0, 1, 0
結論:i++在函式壓棧過程前:
1,先取記憶體資料段i的值,存入乙個臨時量中;
2,然後進行自加,再寫入記憶體資料段的i中;
3,等待所有引數運算完成後,最後壓棧時,將儲存的臨時量的值進行壓棧。
++i在函式壓棧過程前:
1,直接取記憶體資料段的i值,進行自加,再寫入記憶體資料段的i中;
2,等待所有引數運算完成後,最後壓棧時,直接取記憶體資料段的
i值進行壓棧。
i 與 i的區別
public class test static int x,y public static void main string args public static void mymethod 選項 compiletime error prints 1 prints 2 prints 3 print...
i 與 i的區別
今天在寫題的時侯在 i與i 上遇到了麻煩,具體就是我在寫乙個迴圈語句時因為沒有弄清楚i 與 i的區別而導致的錯誤。之前對於i 與 i的使用都只侷限於如下方式 for j 2 j 9 j for j 2 j 9 j 這樣使用好像兩者並沒有什麼區別。然而當我像下面這樣用時卻出了問題 for j i,t ...
談談i 與 i的區別
在通常情況下i 與 i是一樣的,可以等價替換的,例如在for迴圈裡 for int i 0 i 10 i 與for int i 0 i 10 i 是一樣的 但是也用不同的地方 int flag 0 for int i 0 i 10 i num flag i 先賦值 後flag加一 與for int ...