[C語言](*p)++ 與 *p++ 與 ++*p 撥開一團迷霧

環境: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)應該沒有問題了

迷霧終於撥開了。。。

相關文章
相關標籤/搜索