c語言中i++與++i的使用技巧

fighting_kangle發表於2016-07-18

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

int main()

{

    int i = 2;

    i = (i++) + (++i) + (++i) + (i++);

    printf("i = %d", i);

    return 0;

}

輸出結果為: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 <stdio.h>

Int main()

{

Int i = 2;

Printf(“%d %d %d %d %d”, ++i, ++i, i++, ++i,i++):

}

輸出結果為 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

 

相關文章