#includeint main() { int i = 8; printf("%d\n",i); return 0; }
執行結果:

說明:i 先自增1 後i變為9 再將9輸出
--i 自減運算符
功能:i自減1後再參與運算
#includeint main() { int i = 8; printf("%d\n",i--); return 0; }
執行結果:

說明:i 先自減1 後再參與運算所以i的值是7
i++ :i參與運算後i的值自增1
#includeint main() { int i = 8; printf("%d\n",i++); printf("%d\n",i); return 0; }
執行結果:

說明:因為i先參與運算後值自增1,所以輸出的值是8,9;
i-- i參與運算後i的值自減1
#includeint main() { int i = 8; printf("%d\n",i--); printf("%d\n",i); }
執行結果:

說明:因為i 參與運算後i的值自減1,所以輸出的結果是8,7
-i++ i先與負號結合再自增
#includeint main() { int i = 8; printf("%d\n",-i++);‘ printf("%d\n",i); return 0; }
執行結果:

說明:i先與負號結合得到-8然後再自增1(輸出-8),在第二個輸出語句中輸出9
-i--: i先與負號結合再自減
#includeint main() { int i = 8; printf("%d\n",-i--);‘ printf("%d\n",i); return 0; }
執行結果:

-(++i): i先自增再與負號結合
#includeint main() { int i = 8; printf("%d\n",-(++i)); printf("%d\n",i); return 0; }
執行結果:

-(--i): i先自減再與負號結合
#includeint main() { int i = 8; printf("%d\n",-(--i)); printf("%d\n",i); return 0; }
執行結果:

(i++) + (i++) + (i++)
#includeint main() { int i = 5; int p = (i++) + (i++) + (i++); printf("%d\n",p); printf("%d\n",i); return 0; }
執行結果:

說明:這裡的i++是先參與運算後再自增1
所以:p = 5 +5 + 5
有三個i++,i自增三次後得到i= 8;、
(++i) + (++i) + (++i)
#includeint main() { int i = 5; int p = (++i) + (++i) + (++i); printf("%d\n",p); printf("%d\n",i); return 0; }
執行結果:

說明:++i i先自增1後再參與運算
先計算(++i)+(++i)首先自增兩次 i = 7
(++i) + (++i) = 14
而後就變為 q = 14 + (++i)
此時的第三個++i自增了三次變為8
q = 14 +8 = 22
i自增了三次變成了8
(i--) + (i--) + (i--)
#includeint main() { int i = 5; int p = (i--) + (i--) + (i--); printf("%d\n",p); printf("%d\n",i); return 0; }
執行結果:

說明:這裡的i--是先參與運算後再自減1
所以:p = 5 +5 + 5
有三個i--,i自減三次後得到i= 2;、
(--i) + (--i) + (--i)
--i i先自減1後再參與運算
#includeint main() { int i = 5; int p = (--i) + (--i) + (--i); printf("%d\n",p); printf("%d\n",i); return 0; }
執行結果:

說明:先計算(--i)+(--i)首先自減兩次 i = 3
(--i) + (--i) = 6
而後就變為 q = 6 + (--i)
此時的第三個++i自增了三次變為2
q = 6 +2 = 8
i自減了三次變成了2
*p++先取指針p指向的值,再將指針p自增1
#includeint main() { int a[5] = {1,8,10,5,2}; int *p; p = a; printf("%d\n",*p++); printf("%d\n",*p); return 0; }
執行結果:

說明:*p++先計算*p將*p的值輸出後p自增1
所以在第二個printf中打印的是a[1]的值
*p--先取指針p指向的值,再將指針p自減1
#includeint main() { int a[5] = {1,8,10,5,2}; int *p; p = &a[1]; printf("%d\n",*p++); printf("%d\n",*p); return 0; }
執行結果:

說明:*p--先計算*p將*p的值輸出後p自減1
所以在第二個printf中打印的是a[0]的值
(*p)++ 先取指針p指向的值(以p為內存地址的值),再將該值自增1
#includeint main() { int a[5] = {1,8,10,5,2}; int *p; p = a; printf("%d\n",(*p)++); printf("%d\n",*p); return 0; }
執行結果:

說明:p = a;
*p = a[0];
*(p)++ = a[0] + 1;
但是因為i++是先參與運算後自增1
所以第一個printf()輸出的是*p的值1
第二個Printf()輸出的是*p+1的值 2
(*p)-- 先取指針p指向的值(以p為內存地址的值),再將該值自減1
#includeint main() { int a[5] = {1,8,10,5,2}; int *p; p = a; printf("%d\n",(*p)--); printf("%d\n",*p); return 0; }
執行結果:

說明:p = a;
*p = a[0];
*(p)-- = a[0] - 1;
但是因為i++是先參與運算後自增1
所以第一個printf()輸出的是*p的值1
第二個Printf()輸出的是*p-1的值 0
*++p先將指針p自增1(此時指向第二個元素) *操作取出該值
#includeint main() { int a[5] = {1,8,10,5,2}; int *p; p = a; printf("%d\n",*++p) return 0; }
執行結果:

*--p先將指針p自減1(此時指向第一個元素) *操作取出該值
#includeint main() { int a[5] = {1,8,10,5,2}; int *p; p = &a[1]; printf("%d\n",*--p); return 0; }
執行結果:

執行結果: 執行結果:
<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+JiM0MzsmIzQzOypwo7rPyMihs/Zw1rjP8rXEyv3X1qOs1Nm9q9XiuPbK/dfWvNMxPGJyPgo8L3A+CjxwcmUgY2xhc3M9"brush:java;">#include

#include

*(p++) :p與++先結合(而不是*)先結合,這個先是運算符跟誰結合在一起而不是時間的先後
如 t = *(p++);
等價於 t = *p;p++;
#include
執行結果:
*(p--) :p與--先結合(而不是*)先結合,這個先是運算符跟誰結合在一起而不是時間的先後
如 t = *(p--);
等價於 t = *p;p--; #include
執行結果:
