C語言宣告解析方法

2021-09-09 00:15:04 字數 2277 閱讀 8263

1.c語言宣告的單獨語法成份

宣告器是c語言宣告的非常重要成份,他是所有宣告的核心內容,簡單的說:宣告器就是識別符號以及與它組合在一起的任何指標、函式括號、陣列下表等,為了方便起見這裡進行分類表示。

1)指標

(1)*

(2)* const

(3)* volatile

(4)* const volatile

(5)* volatile const

2)直接宣告器

(1)識別符號

(2)識別符號[下表]

(3)識別符號(引數)

(4)(宣告器)

3)初始化內容

(1)= 初始值

c語言中的完整宣告包括的內容如下:

1)型別說明符:包括儲存型別和型別限定符

2)宣告器(見上面)

3)更多的宣告器

4)分號

注意:不是上面的所有組合都是合法的,如:你不能像這樣宣告foo()()、foo()。

2.優先順序規則

上面說明c語言中宣告的各個組成部分,要理解乙個宣告必須要動的其中的優先順序規則,可以簡潔的以下面形式來直觀的反應這個規則:

a 宣告從他的名字開始讀取,然後按照優先順序順序依次讀取

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

(1)宣告中被括號括起來的部分

(2)字尾操作符:括號()表示這是個函式,而方括號表示這是乙個陣列

(3)字首操作符:星號*表示"指向...的指標"

c 如果const和(或)volatile關鍵字的後面緊跟型別說明符(如:int, long等),那麼它作用於型別說明符;否則其它情況下作用於它左邊緊鄰的指標星號。

const char *p; /* 常量指標 */

char const *p; /* 同上 */

char * const p;     /* 指標常量 */

3. 舉例說明

(1)用優先順序規則分析c語言宣告一例:

char * const *(*next)();

下面使用優先順序規則解決這個宣告:

a 首先,看變數名"next",並注意到它直接被括號所擴住

b.1 所以先把括號裡得東西作為乙個整體,得出"next是乙個指向...的指標"

b 然後考慮括號外面的東西,在星號字首和括號字尾之間做出選擇

b.2 該規則告訴我們優先順序較高的是右邊的函式括號,所以得出「next是乙個函式指標,指向乙個返回...的函式」

b.3 然後,處理字首「*」,得出指標所指的內容

c 最後把「char * const」解釋為指向字元的常量指標

上述的分析結果可以概括為:這個宣告表示next是乙個指標,它指向乙個函式,該函式返回乙個指標,該指標指向乙個型別為char的常量指標。

(2)分析c語言宣告二例:

int *(*p)();

a 首先,看變數名"p",並注意到它直接被括號所擴住

b.1 所以先把括號裡得東西作為乙個整體,得出"p是乙個指向...的指標陣列"

b 然後考慮括號外面的東西,在星號字首和括號字尾之間做出選擇

b.2 該規則告訴我們優先順序較高的是右邊的函式括號,所以得出「p是乙個指向函式指標陣列的指標,陣列的每乙個元素返回值是...的函式」

b.3 然後,處理括號外的字首「*」,得出指標所指的內容

c 最後把「int *」解釋為指向整形的指標

上述的分析結果可以概括為:這個宣告表示p是乙個指標,它指向乙個函式指標陣列,陣列中每乙個元素的形參為空,返回型別為指向乙個型別為int指標。

(3)分析c語言宣告三例:

void (*signal(int sig,void(*func)(int)))(int);

乍一看,這是乙個很嚇人的宣告,不過掌握了前面的優先順序規則,再分析這個宣告就簡單的多了:

a 首先,看變數名"signal",並注意到它直接被括號所擴住

b.1 所以先把括號裡得東西作為乙個整體,得出"signal是乙個指向...的函式指標,有形參有返回值,返回值是乙個指向...的指標"

b 然後考慮括號外面的東西,在星號字首和括號字尾之間做出選擇,顯然括號外面的東西就是signal的返回值

b.2 該規則告訴我們優先順序較高的是右邊的函式括號,所以得出「signal的返回值也是乙個指向...的函式指標」

b.3 然後,括號外沒有"*"字首

c 沒有符合的情況

上述的分析結果可以概括為:這個宣告表示signal是乙個指標,它指向乙個函式,該函式的形參為int和乙個函式指標void(*func)(),返回型別也為乙個函式指標,該函式的形參int,返回值為void。

掌握了這個方法,碰到再複雜的c宣告語句都能輕鬆搞定了。

C語言宣告解析

首先,來看乙個簡單的例子 int a1 a1是乙個int int a2 a2是乙個陣列,它的每乙個元素是乙個int int a3 a3是乙個陣列,它的每乙個元素是乙個int 即,它的每乙個元素是乙個指向int的指標 int a4 a4是乙個指標,它指向乙個int陣列 可能上面的3 4兩行比較容易混淆...

解析C語言宣告

在學習c語言的過程中,會先遇到陣列指標,指標陣列此類的概念。這些概念實在是晦澀難懂,在進一步學習之後,你會發現更加恐怖的還有各種各樣的宣告,比如 char const next 那麼這些宣告到底是什麼意思呢?序號說明 a宣告從他的名字開始讀取,然後按照優先順序順序依次讀取 b優先順序從高到低依次是 ...

深入解析C語言宣告

如果說c語言宣告很簡單的人不是牛人就是還沒入門。本文來講解c語言的宣告的一些基本內容,很多內容參考 c專家程式設計 首先由乙個最簡單的問題引入,你知道 int p 5 和 int p 5 的區別在 嗎?把後面的答案遮到,想想。也許你知道反正乙個是含有五個指向整型的指標元素的指標陣列,另乙個是指向乙個...