記得一次寫題時將++i寫成了i++,怎麼也除錯不對qaq,事後也不明白,現在水發一篇總結( ̄y▽, ̄)╭
i++在執行時是這樣執行的:先賦值,再自加用**表示為
a = i++; ------------> a = i; i = i + 1;
++i在執行時是這樣執行的:先自加,再賦值用**表示為:
a = ++i --------------------> i = i + 1; a = i;
形象地理解為i++先做別的事,再自己加,++i先自己加,再做別的事情i++;++i;就c語言**來看,i++ 和 ++i 都只有一行,看起來似乎二者的執行效率一樣了?(連我這種蒟蒻都知道不是的)比如i = 3,a = i++就是說a = 3,完成之後讓i變成4,a = ++i就是先讓i++變成4,然後a = 4
我們先看一下下面這段**:
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...