環境:win7
IDE:DEV-C++
編譯器:GCC
1.先說++i和i++的基礎
代碼如下:
#include <stdio.h> //just change simple void stop(void) { system("pause"); } int main(void) { int i = 1; printf("i++ = %d\n",i++); printf("i = %d\n",i); int j = 1; printf("++j = %d\n",++j); printf("j = %d\n",j); printf("i++ = : %d ++i = %d\n",i++,++i); printf("i = %d\n",i); printf("++j = : %d j++ = %d\n",++j,j++); printf("j = %d\n",j); stop(); return 0; }
運行結果:
i++ = i = ++j = j = i++ = : ++i = i = ++j = : j++ = j =
1)i++只有遇到";"分號才會影響i的值, i++輸出的值還是1,i的值也是1
2)i經過分號之後,i=2,因為自增了
3)++j不管遇到不遇到分號";"都會影響j值和++j值,所以J=2
4)j的值也是2
5)根據編譯器的不同和操作系統的不同,printf計算方向也不同,這是從右開始計算,先++i,再i++,所以輸出3 和3
6)最後一個i++遇到了分號,所以i=4
7)從右開始計算,j打印的結果還是2,但是第二次取出來的值是3,所以++j=4
2.理清概念 *p++ 中 *和++的優先級
#include <stdio.h> stop( system( main( i = * p = & printf( v = *p++ printf( printf( printf( system( }
運行結果:
-p = v = -p = i =
從結果來看++符號影響了p的值並沒有影響i的值,好像++的優先級要高於 指針*符號
再看例子
#include <stdio.h> stop( system( main( i = * p = & printf( v = ++* printf( printf( printf( system( }
運算結果:
-p = v = -p = i =
怎麼++不影響p的值了?
再看例子
把 代碼稍微調整:v = *++p;
運算結果:
-p = v = -p = i =
啊額,原來 * 和++優先級是同一級別,同一級別按照從右往左的順序計算。
OK了,漸漸的所有問題都解決了,
*(p++)
*(++p)
(*p)++
++(*p)應該沒有問題了
迷霧終於撥開了。。。