首先我們要先知道++i與i++的基本用法及其基本區別
++i 先自加,在使用
i++ 先使用,再自加
粗略地看,++i和i++的作用都相當於i = i+ 1,但++i和i++的區別在於++i是先執行i = i + 1後,再使用i的值,
而i++是先使用i的值後,再執行i = i+ 1.
假如i的原值是3,則下面兩個例子
j = ++i(i的值先變成4,再賦給j,j的值為4)
j = i++(先將i的值賦值給j,即j為3,再執行i的自加,i為4)
清楚這些基本功能之後,我開始說一些複雜的運算,如下:
型別一:
#include
int main()
輸出結果為:16
首先要知道運算方向是從左往右,因為要先運算(i++) + (++i),所以這是乙個整體,所以i的值為++i中自增過後的值,
即為3,然後與++i相加,又因此時i也要自加,所以此時i為4,然後與i++相加,此時i不自加,i為4,即此時運算結果為
3 + 3 + 4 + 4 = 14,又因為式子為 i = (i++) + (++i) + (++i) +(i++);要輸出i的值,所以要將式子中兩個i++中後自加的1
加上,即i = 3 + 3 +4 +4 +2=16
若在程式中加乙個int m;令m= (i++) + (++i) + (++i) + (i++);
則輸出結果m為14,因為題中是求m的值,所以不用考慮最後i++中的自加。 再如
i=(++i)+(i++)+(++i)+(i++)+(i++)
此時i=3+3+4+4+4+3=21
再如另一些情況,++i與i++與函式一起使用,如
型別二在函式中,運算方向為自右往左,在運算過程中要將++i替換成變數名,i++替換成數值。
#include
int main()
輸出結果為 7 7 4 7 2
首先運算方向自右往左
1. 最右面i++替換成數值,即為2,此時i自加1為3
2. 將++i替換成變數i,此時i繼續自加1為4
3. 將i++替換為數值,即為4,此時i繼續自加1為5
4. 將++i替換成變數i,此時i繼續自加1為6
5. 將++i替換成變數i,此時i繼續自加1變為7
此時結果為(i,i,4,i,2)
又因為最後運算結果i為7,即結果為7 7 4 7 2
同樣若printf(「%d %d %d %d %d」, i++, ++i, i, i++,++i):
其結果為(5,i,i,3,i)
因為其中有個i,所以這一步i沒有自加,所以最後i的值為6
即5,6, 6,3, 6
c語言中 i 和 i 問題!
關於 i 和 i 一 簡單地說,單獨使用時,就是 i i 1 二 a i,相當於 i i 1,a i 先i i 1,再使用i的值 a i 相當於 a i,i i 1 先使用i的值,再i i 1 前者是先自增,後賦值 後者是先賦值,後自增。三 單獨使用時,i 的效率要比 i 效率高。1 為什麼?在內建...
C語言中i 和 i的區別
1 字首 i 變數型別可以是基本型別也可以是指 指標型別。i使變數i的值增加 1 並以i的新值作為表示式 i 運算的結果,該表示式返回的就是變數i增加1以後的值 i等價於i i 1 2 字尾 i i 的意思是首先求得整個表示式的值,該表示式的值就是變數i原來的值。在確定了表示式的結果以後,i的值再增...
C語言中的 i 和 i 的區別
1 i int i 0 while i 10 2 i inti 0 while i 10 1 與 2 經過運算後,i的值都是10。在while和for迴圈中的 i 和 i 是沒有區別的。現在我們來看一段程式 include int main i 和 i的區別就是 i 先引用,後增加 i 先增加,後引...