C語言複雜指標宣告應如何閱讀

2021-05-22 22:05:08 字數 1721 閱讀 5821

參考:http://www.diybl.com/course/3_program/c++/cppsl/2008217/100104.html

the   right-left   rule:   start   reading   the   declaration   from  the  

innermost   parentheses,   go   right,   and   then   go   left.

when   you   encounter   parentheses,   the   direction   should  

be  reversed.   once   everything   in   the   parentheses   has   been  

parsed,   jump   out   of   it.   continue   till   the   whole  declaration  

has   been   parsed.

文章作者的修正:

應該是從未定義的識別符號開始閱讀,而不是從括號讀起,之所以是未定義的識別符號,

是因為乙個宣告裡面可能有多個識別符號,但未定義的識別符號只會有乙個。

下面是我回答的網頁上面遺留的問題

int (*(*func)[5][6])[7][8]; 

找到識別符號 func 

看右邊:none 

看左邊:* 說明func是乙個指標 

跳出括號 

看右邊:是乙個二維陣列 

看左邊:* 說明陣列元素型別是指標 

跳出括號 

看右邊:是乙個二維陣列 

看左邊: int 說明陣列元素型別是整型 

總結: func是乙個指向二維陣列a的指標,a陣列的元素是指向int型的二維陣列的指標 

int (*(*(*func)(int *))[5])(int *); 

找到識別符號 func 

看右邊:none 

看左邊:* 說明func是乙個指標 

跳出括號 

看右邊:(int *) 說明是乙個函式,函式引數是指向int的指標 

看左邊:* 說明返回值是乙個指標 

跳出括號 

看右邊:說明是乙個陣列 

看左邊:* 說明陣列的元素是指標 

跳出括號 

看右邊:(int *)說明是乙個函式,函式引數是指向int的指標 

看左邊:int 說明函式返回值是整型 

總結:func是乙個指向a函式的指標,a函式的引數是int,a函式的返回值是乙個指向b陣列的指標,b陣列的元素是指向b函式的指標,b函式的引數是乙個指向int的指標,返回值是int 

int (*(*func[7][8][9])(int*))[5]; 

找到識別符號 func 

看右邊:說明func是乙個三維陣列 

看左邊:* 說明陣列的元素型別是指標 

跳出括號 

看右邊:(int *) 說明是乙個函式,函式引數是指向int的指標 

看左邊:*說明函式的返回值是乙個指標 

跳出括號 

看右邊:說明是乙個陣列 

看左邊:int 說明陣列的元素型別是整型 

總結:func是乙個以指向a函式的指標為元素的三維陣列,a函式的引數是指向int的指標,a函式的返回值是乙個b陣列,陣列的元素是int

C語言複雜指標宣告應如何閱讀

c語言複雜指標宣告應如何閱讀 2010年05月11日 星期二 下午 03 41 c語言複雜指標宣告應如何閱讀 c語言所有複雜的指標宣告,都是由各種宣告巢狀構成的。如何解讀複雜指標宣告呢?右左法則是乙個既著名又常用的方法。不過,右左法則其實並不是c標準裡面 的內容,它是從c標準的宣告規定中歸納出來的方...

如何讀C 指標複雜宣告?

很多人都會被c 指標的複雜宣告搞混了。其實,讀c 指標宣告的過程,我們可以遵循2個原則 1 從名字開始,右 左 右 左 右這樣來讀 2 不斷對指標內容進行補完 對於指標,我們要知道指標的型別,知道了指標的型別也就是補完了 對於函式,我們要知道函式的引數和返回值,知道了也算是補完了 舉個例子 floa...

如何讀懂 C 語言複雜的宣告

如何讀懂 c 語言複雜的宣告 參考 雖說 c 語言相比於其他更高階的語言來講,有著非常精簡的語法結構,對於初學者非常的友好。然而,使用 c 語言依然可以可以寫出非常難懂的 也許這也就是精簡的語法所必須面對的缺點吧。筆者就經常一些複雜的宣告,看得一頭霧水,這裡就分享乙個幫你讀懂這些宣告的技巧吧。先自己...