我們定義如下:
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,歡迎技術交流。