首先我們要先知道++i與i++的基本用法及其基本區別
++i 先自加1,再使用;
i++ 先使用,再自加1。
相同:++i和i++的作用都相當於i = i + 1。
區別:++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 <stdio.h>
int main(void)
{
int i = 2;
i = (i++) + (++i) + (++i) + (i++);
printf("i = %d\n", i);
return 0;
}
輸出結果爲:16
首先要知道運算方向是從左往右,i = ((((i++) + (++i))+(++i))+(i++)) 。
第一步:先運算(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++替換成數值。
#include <stdio.h>
int main(void)
{
int i = 2;
printf(「%d ,%d ,%d ,%d ,%d\n」, ++i, ++i, i++, ++i, i++);
return 0;
}
輸出結果爲 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