i++,++i 操作符

2020-08-08 21:34:45

首先我們要先知道++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