int p;
//這是乙個普通的整型變數
int *p;
//首先從p 處開始,先與*結合,所以說明p 是乙個指標,然後再與int 結合,說明指標所指向的內容的型別為int 型.所以p是乙個返回整型資料的指標
int p[3];
//首先從p 處開始,先與結合,說明p 是乙個陣列,然後與int 結合,說明陣列裡的元素是整型的,所以p 是乙個由整型資料組成的陣列
int *p[3];
//首先從p 處開始,先與結合,因為其優先順序比高,所以p 是乙個陣列,然後再與結合,說明陣列裡的元素是指標型別,然後再與int 結合,說明指標所指向的內容的型別是整型的,所以p 是乙個由返回整型資料的指標所組成的陣列
int (*p)[3];
//首先從p 處開始,先與*結合,說明p 是乙個指標然後再與結合(與"()"這步可以忽略,只是為了改變優先順序),說明指標所指向的內容是乙個陣列,然後再與int 結合,說明陣列裡的元素是整型的.所以p 是乙個指向由整型資料組成的陣列的指標
int **p;
//首先從p 開始,先與結合,說是p 是乙個指標,然後再與結合,說明指標所指向的元素是指標,然後再與int 結合,說明該指標所指向的元素是整型資料.由於二級指標以及更高階的指標極少用在複雜的型別中,所以後面更複雜的型別我們就不考慮多級指標了,最多隻考慮一級指標.
int p(int);
//從p 處起,先與()結合,說明p 是乙個函式,然後進入()裡分析,說明該函式有乙個整型變數的引數,然後再與外面的int 結合,說明函式的返回值是乙個整型資料
int (*p)(int);
//從p 處開始,先與指標結合,說明p 是乙個指標,然後與()結合,說明指標指向的是乙個函式,然後再與()裡的int 結合,說明函式有乙個int 型的引數,再與最外層的int 結合,說明函式的返回型別是整型,所以p 是乙個指向有乙個整型引數且返回型別為整型的函式的指標
int *(*p(int))[3];
//可以先跳過,不看這個型別,過於複雜從p 開始,先與()結合,說明p 是乙個函式,然後進入()裡面,與int 結合,說明函式有乙個整型變數引數,然後再與外面的結合,說明函式返回的是乙個指標,然後到最外面一層,先與結合,說明返回的指標指向的是乙個陣列,然後再與結合,說明陣列裡的元素是指標,然後再與int 結合,說明指標指向的內容是整型資料.所以p 是乙個引數為乙個整資料且返回乙個指向由整型指標變數組成的陣列的指標變數的函式.
指標巢狀讀法
作者寫的很不錯!有種豁然開朗的感覺,不再死記硬背了。c語言所有複雜的指標宣告,都是由各種宣告巢狀構成的。如何解讀複雜指標宣告呢?右左法則是乙個既著名又常用的方法。不過,右左法則其實並不是c標準裡面的內容,它是從c標準的宣告規定中歸納出來的方法。c標準的宣告規則,是用來解決如何建立宣告的,而右左法則是...
C 之 多級指標
多級指標 分析原則,從變數名處起,根據運算子優先順序結合,一步一步分析。int p 3 首先從p處開始,先與結合,因為其優先順序比 高,所以p是乙個陣列,然後再與 結合,說明陣列裡的元素是指標型別,然後再與int結合,說明指標所指向的內容的型別是整型的,所以p是乙個由返回整型資料的指標所組成的陣列。...
類之多型的理解
多型的理解 使用基類指標呼叫派生類成員 include using namespace std class left int left class right int right class bottom public left,public right void funleft void funr...