i 和 i的區別

2021-10-23 00:19:50 字數 1398 閱讀 8285

記得一次寫題時將++i寫成了i++,怎麼也除錯不對qaq,事後也不明白,現在水發一篇總結( ̄y▽, ̄)╭ 

i++在執行時是這樣執行的:先賦值,再自加

**表示為

a = i++;  ------------> a = i; i = i + 1;

++i在執行時是這樣執行的:先自加,再賦值

**表示為:

a = ++i --------------------> i = i + 1; a = i;

形象地理解為i++先做別的事,再自己加,++i先自己加再做別的事情

比如i = 3,a = i++就是說a = 3,完成之後讓i變成4,a = ++i就是先讓i++變成4,然後a = 4

i++;++i;就c語言**來看,i++ 和 ++i 都只有一行,看起來似乎二者的執行效率一樣了?(連我這種蒟蒻都知道不是的)

我們先看一下下面這段**:

int i,a,b;

i = 0;

a = i++;

i = 0;

b = ++i;

檢視上述c語言**對應的彙編**可見,j=i++; 計算機需要 4 條指令來解釋,比執行 k=++i;多出了一條指令。多出的一條指令為:在對 i 執行自加操作之前,先儲存 i 的當前值留作稍後使用(賦值為a)。所以,++i的效率比i++高

可能很多人並不知道啥是左值,說白了,左值就是可以放在賦值符左邊的變數,而右值是所有不是左值的式子的值

能否被賦值不是區分左值與右值的依據。比如,c++的const左值是不可賦值的;而右值可能允許被賦值。左值與右值的根本區別在於是否允許取位址&運算子獲得對應的記憶體位址

而i++不能作為左值,++i則可以!!!

例如下面這段**:

i++ = a; //錯誤語句

++i = a //正確

i和i 的區別

大家都應該知道i 和 i的區別,前者是先使用i的值,然後再增加1,而後者是先增加1然後再使用i的值。但是i 和 i那個更好呢?我們實現角度來看 前者是將i值加1後賦給i,然後返回i本身 而後者是先用個臨時變數儲存i值,然後將i值加1賦給i,然後返回臨時變數的值。內建資料型別他們的效率差不多,看他們的...

i 和 i的區別

當年上c 課的時候對於i 和 i的區別就稀里糊塗。後來沒注意也沒出過什麼問題。但是這個問題還是應該搞清楚。假如有乙個vector,值為 1,2,3,4,5,6,7 用以下程式輸出 i 0 while i 7 i 0 while i 7 cout beforei v i endl cout befor...

i 和 i的區別

很多朋友在學習基礎的時候很容易遇到過這個問題,i和i 到底有什麼區別?下面來詳細解釋一下。首先i 和 i單獨為一條語句時沒有任何區別 例如 int i 1 i 單獨為一條語句 system.out.println i i i 2 int i 1 i 單獨為一條語句 system.out.printl...