環境:win7spa
IDE:DEV-C++操作系統
編譯器:GCC指針
1.先說++i和i++的基礎code
代碼以下:blog
#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; }
運行結果:編譯器
1 i++ = 1 2 i = 2 3 ++j = 2 4 j = 2 5 i++ = : 3 ++i = 3 6 i = 4 7 ++j = : 4 j++ = 2 8 j = 4
1)i++只有遇到";"分號纔會影響i的值, i++輸出的值仍是1,i的值也是1io
2)i通過分號以後,i=2,由於自增了編譯
3)++j無論遇到不遇到分號";"都會影響j值和++j值,因此J=2class
4)j的值也是2基礎
5)根據編譯器的不一樣和操做系統的不一樣,printf計算方向也不一樣,這是從右開始計算,先++i,再i++,因此輸出3 和3
6)最後一個i++遇到了分號,因此i=4
7)從右開始計算,j打印的結果仍是2,可是第二次取出來的值是3,因此++j=4
2.理清概念 *p++ 中 *和++的優先級
1 #include <stdio.h> 2 3 //just change simple 4 void stop(void) 5 { 6 system("pause"); 7 } 8 9 int main(void) 10 { 11 int i = 5; 12 int *p; 13 p = &i; 14 printf("1-p = %d\n",p); 15 int v; 16 v = *p++; 17 printf("v = %d\n",v); 18 printf("2-p = %d\n",p); 19 printf("i = %d\n",i); 20 system("pause"); 21 return 0; 22 }
運行結果:
1 1-p = 2686788 2 v = 5 3 2-p = 2686792 4 i = 5
從結果來看++符號影響了p的值並無影響i的值,好像++的優先級要高於 指針*符號
再看例子
1 #include <stdio.h> 2 3 //just change simple 4 void stop(void) 5 { 6 system("pause"); 7 } 8 9 int main(void) 10 { 11 int i = 5; 12 int *p; 13 p = &i; 14 printf("1-p = %d\n",p); 15 int v; 16 v = ++*p; 17 printf("v = %d\n",v); 18 printf("2-p = %d\n",p); 19 printf("i = %d\n",i); 20 system("pause"); 21 return 0; 22 }
運算結果:
1 1-p = 2686784 2 v = 6 3 2-p = 2686784 4 i = 6
怎麼++不影響p的值了?
再看例子
把 代碼稍微調整:v = *++p;
運算結果:
1 1-p = 2686788 2 v = 2686840 3 2-p = 2686792 4 i = 5
啊額,原來 * 和++優先級是同一級別,同一級別按照從右往左的順序計算。
OK了,漸漸的全部問題都解決了,
*(p++)
*(++p)
(*p)++
++(*p)應該沒有問題了
迷霧終於撥開了。。。