指標的右左法
右左法則(右左法則的英文原文翻譯);首先從最裡面的圓括號開始閱讀,然後向右看,再往左看。每當遇到圓括號時,就應該調轉閱讀方向。一旦解析完圓括號裡面所有東西,就跳出圓括號。重複整個過程直到整個宣告解析完成。其實左右法則就是以標示符為中心點,自右向左旋轉解讀指標的宣告含義。
例如:int (*a)[10]; 整型陣列指標變數(首先看括號裡面,a是乙個指標變數,他存放的是陣列元素的位址,而陣列的每個元素都是整形)
int (*a[10])(int) 函式指標陣列(首先a是乙個陣列,它的元素都是指標,指標指向乙個形參為整形,返回值也為整形的函式)
下面來看幾個複雜一點的指標宣告
int *(*(*a)(int))[10](以a為中心,層層剝開括號,從右往左看)
a:函式指標變數,指向乙個形參為整形,返回值為返回值陣列指標,該指標指向乙個整形指標陣列。
閱讀步驟:
1. 從變數名開始 -------------------------------------------- a
2. 往右看,什麼也沒有,碰到了),因此往左看,碰到乙個* ------ 乙個指標
3. 跳出括號,碰到了(int) ----------------------------------- 乙個帶乙個int引數的函式
4. 向左看,發現乙個* --------------------------------------- (函式)返回乙個指標
5. 跳出括號,向右看,碰到[10] ------------------------------ 乙個10元素的陣列
6. 向左看,發現乙個* --------------------------------------- 指標
7. 向左看,發現int ----------------------------------------- int型別
再來看乙個例子:
int *( *( *arr[5])())();
arr:函式指標陣列,該陣列裡的元素指向乙個形參為空,返回值是乙個函式指標,該指標指向乙個形參為空,返回值為整形指標的函式
閱讀步驟:
1. 從變數名開始 -------------------------------------------- arr
2. 往右看,發現是乙個陣列 ---------------------------------- 乙個5元素的陣列
3. 向左看,發現乙個* --------------------------------------- 指標
4. 跳出括號,向右看,發現() -------------------------------- 不帶引數的函式
5. 向左看,碰到* ------------------------------------------- (函式)返回乙個指標
6. 跳出括號,向右發現() ------------------------------------ 不帶引數的函式
7. 向左,發現* --------------------------------------------- (函式)返回乙個指標
8. 繼續向左,發現int --------------------------------------- int型別
float ( * ( *b()) )();
b是乙個函式,該函式形參為空,返回值為陣列指標,該陣列指標指向乙個函式指標陣列,陣列裡的元素指向乙個形參為空,返回值為浮點型;
2. 往右看,發現是乙個函式 ---------------------------------- 乙個不帶引數的函式
3. 向左看,發現乙個* --------------------------------------- 指標
4. 跳出括號,向右看,發現陣列-------------------------------- 元素個數未定的陣列
5. 向左看,碰到* ------------------------------------------- 指標
6. 跳出括號,向右發現() ------------------------------------ 不帶引數的函式
8. 繼續向左,發現float --------------------------------------- float型別
void * ( *c) ( char a, int (*b)());
float ( * ( * e[10]) (int *) ) [5];
e是乙個函式指標陣列,該陣列的元素指向乙個形參為整形指標,返回值為陣列指標,該指標指向f浮點型的陣列;
C指標右左法則
摘錄的別人的 c語言所有複雜的指標宣告,都是由各種宣告巢狀構成的。如何解讀複雜指標宣告呢?右左法則是乙個既著名又常用的方法。不過,右左法則其實並不是c標準裡面的內容,它是從c標準的宣告規定中歸納出來的方法。c標準的宣告規則,是用來解決如何建立宣告的,而右左法則是用來解決如何辯識乙個宣告的,兩者可以說...
C指標右左法則
摘錄的別人的 c語言所有複雜的指標宣告,都是由各種宣告巢狀構成的。如何解讀複雜指標宣告呢?右左法則是乙個既著名又常用的方法。不過,右左法則其實並不是c標準裡面的內容,它是從c標準的宣告規定中歸納出來的方法。c標準的宣告規則,是用來解決如何建立宣告的,而右左法則是用來解決如何辯識乙個宣告的,兩者可以說...
右左法則 複雜指標解析
第八章 右左法則 複雜指標解析 上一章費那麼多唇舌討論c語言的宣告,其實目的都是為了這一章,期望讀者通過對c語言宣告形式的詳細了解,樹立宣告巢狀的觀念,因為c語言所有複雜的指標宣告,都是由各種宣告巢狀構成的。如何解讀複雜指標宣告呢?右左法則是乙個既著名又常用的方法。不過,右左法則其實並不是c標準裡面...