指標的右左法則

2021-07-24 08:55:33 字數 2296 閱讀 2681

指標的右左法

右左法則(右左法則的英文原文翻譯);首先從最裡面的圓括號開始閱讀,然後向右看,再往左看。每當遇到圓括號時,就應該調轉閱讀方向。一旦解析完圓括號裡面所有東西,就跳出圓括號。重複整個過程直到整個宣告解析完成。其實左右法則就是以標示符為中心點,自右向左旋轉解讀指標的宣告含義。

例如: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標準裡面...