如何分析複雜的C語言宣告

2021-07-02 20:23:05 字數 718 閱讀 3215

宣告從它的名字開始讀取,然後按照優先順序順序以此讀取

優先順序從高到低依次是:

宣告中被括號擴起來的那部分

字尾操作符

字首引數操作符

如果const和volatile關鍵字的後面緊跟著型別說明符(如int,long),那麼 它作用於型別說明符. 其他情況下,從const和volatile關鍵字作用於它左 側緊鄰的指標星號.

我的理解是const和volatile關鍵字約束的是它後面的東西,* 例如const char* p表示p是個指向char的指標,這個char是const的, char const * p表示p是個指向const變數的指標同時這個變數是char型, 而char * const p 表示p是const的,這個p是個指標,該指標指向char型.

2. 分析char * const *(*next)();

適用規則解釋a

首先看變數next,同時注意到它直接被()括住

b.1把括號內的東西看成乙個整體

b.3表示next為乙個指向…的指標

b考慮括號外的東西,在星號字首和括號字尾之間進行選擇

b.2規則告訴我們,優先順序高的是後邊的函式括號,所以next是乙個函式指標,指向乙個返回…的函式

b.3字首*表示該函式返回乙個指標

c該指標指向乙個const的值,*注意不要理解為該指標是const的!!*

b.3該常量是乙個指向char的指標

分析C語言宣告

void signal int sig,void handler int int 分析如下形式 void signal int signal是乙個函式,它的返回值是乙個函式指標,而它的引數中有乙個函式指標形式void handler int 借助於typedef來進行簡化如下 定義函式指標返回值是v...

C語言宣告

怎樣定義和宣告全域性變數和函式最好。首先,儘管乙個全域性變數或函式可以有多處宣告但是定義卻最多隻允許出現一次,對於全域性變數,定義是真正分配空間並賦初值的宣告,對於函式,定義是提供函式體的宣告。例如 這些是宣告 extern int i extern int f 而這些是定義 int i 1 int...

C語言 宣告

1 首先著眼於識別符號 變數名或者函式名 2 從距離識別符號最近的地方開始,依照優先順序解釋派生型別 指標,陣列和函式 優先順序如下 1 用於整理宣告內容的括弧 2 用於表示陣列的,用於表示函式的 3 用於表示指標的 例如int func p double func p是指向返回int型別的函式的指...