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語言宣告解析方法
1.c語言宣告的單獨語法成份 宣告器是c語言宣告的非常重要成份,他是所有宣告的核心內容,簡單的說 宣告器就是識別符號以及與它組合在一起的任何指標 函式括號 陣列下表等,為了方便起見這裡進行分類表示。1 指標 1 2 const 3 volatile 4 const volatile 5 volati...
C語言宣告的解析
c語言的宣告有時候是及其複雜的,不如char c 10 int p 這樣宣告即使讓c語言老手看到也會不寒而慄,有沒有想過讓程式幫我們把這麼難懂的宣告翻譯成比較通俗易懂的語言呢?完全可以!先來個簡單的 int i 再來個指標 int p 看看複雜一點的 char const next 最後看看這個 c...
C語言 串匹配的一般方法
串的一般的模式匹配 思想 從主串s的第pos個位置起,和子串的第乙個字元比較,若相等,則逐個比較後面的字元 若不相等,則從主串的第pos 1個位置起,再重新和子串比較 include include includeint index char s,char t,int pos 求從第pos位置起,子...