*p++,(*p)++,*++p,++*p,*(p++)有什麼不同?

我們定義如下:

int a[5]={1,3,5,7,9};

int *p = a;

int Data = 0;

 

例題1、

Data = *p++

執行後,結果爲:

Data 爲1,p指向a[1]。

分析:

* 和++,優先級相同,但是,++是後運算的。

相當於下面兩句:

Data = *p

p++;

 

例題2、

Data = (*p)++

執行後,結果爲:

Data 爲1,p不變,仍然指向a[0],此時a[0]變爲2。

分析:

()的優先級高於++和*,先計算()內的數值,*p是取得了a[0],然後將這個數值賦值給Data,然後這個值再加1,a[0]加1。

相當於下面兩句:

Data = a[0]

a[0] = a[0] + 1;

 

例題3、

Data = ((*p)++)

執行後,結果爲:

Data 爲1,p不變,仍然指向a[0],此時a[0]變爲2,結果不受括號影響。

例題4、

Data = *++p

執行後,結果爲:

Data 爲3,p加1,指向a[1],然後取內容賦值給Data。

分析:

*和++優先級一樣,此時++先與p進行運算,p會先加1,然後再將指向的變量內容賦值給Data。

例題5、

Data = ++*p

執行後,結果爲:

Data 爲2,p不變,仍然指向a[0]。

分析:

*和++優先級一樣,此時*先與p進行運算,*p爲a[0],然後a[0]先加1,再賦值給Data。

例題6、

Data = *(p++)

執行後,結果爲:

Data 爲1,p加1,指向a[1]。

分析:

*和++優先級一樣,但是()優先級最更高,此時先計算括號內p++,但是由於++是後運算的,此時相當於Data =*(p);p++。

 

我的qq 爲308777087,歡迎技術交流。

 

 

 

發佈了7 篇原創文章 · 獲贊 4 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章