程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> [C語言](*p)++ 與 *p++ 與 ++*p 撥開一團迷霧

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

編輯:關於C語言

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

迷霧終於撥開了。。。


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved