如何读懂 C 语言复杂的声明
????如何讀懂 C 語言復(fù)雜的聲明
作者能力有限, 如果您在閱讀過程中發(fā)現(xiàn)任何錯(cuò)誤, 還請您務(wù)必聯(lián)系本人,指出錯(cuò)誤, 避免后來讀者再學(xué)習(xí)錯(cuò)誤的知識(shí).謝謝!
參考<<C專家編程>>
廢話
雖說 C 語言相比于其他更高級的語言來講,有著非常精簡的語法結(jié)構(gòu),對于初學(xué)者非常的友好。 然而,使用 C 語言依然可以可以寫出非常難懂的代碼, 也許這也就是精簡的語法所必須面對的缺點(diǎn)吧。 筆者就經(jīng)常一些復(fù)雜的聲明,看得一頭霧水,這里就分享一個(gè)幫你讀懂這些聲明的技巧吧。
自測
先自己測試一下, 如下的聲明你能讀懂嗎?
void (*signal(int sig, void(*func)(int))) (int); // 當(dāng)然,比這個(gè)復(fù)雜的聲明還有很多...技巧
要讀懂一個(gè)聲明,必須要懂得其中的優(yōu)先級規(guī)則。
優(yōu)先級規(guī)則如下:
A: 聲明從它的名字開始讀起, 然后按照優(yōu)先級順序依次讀取
B: 優(yōu)先級從高到低依次是:
????B.1: 聲明中括號括起來的部分
????B.2: 后綴操作符:
????????括號 () 表示這是一個(gè)函數(shù)
????????方括號 [] 表示這是一個(gè)數(shù)組
????B.3: 前綴操作符: 星號 * 表示 “指向…的指針”
C: 如果 const 和 ( 或 ) volatile 關(guān)鍵字的后邊緊跟類型說明符(如 long 等), 那么它作用于類型說明符。
????在其他情況下,const 和 ( 或 ) volatile 關(guān)鍵字作用于它左邊緊鄰的指針星號
示例
例1:
char * const *(*next)();總結(jié),這個(gè)聲明的含義為: next 是一個(gè)函數(shù)指針, 該函數(shù)指針指向的函數(shù)無輸入?yún)?shù)且返回一個(gè)指向字符的常量指針
例2:
void (*signal(int sig, void(*func)(int))) (int); // 當(dāng)然,比這個(gè)復(fù)雜的聲明還有很多...這就是我們前面提到的聲明,我們來試著分析一下。
總結(jié), 這個(gè)聲明的含義為: signal 是一個(gè)函數(shù)指針,它返回一個(gè)接收一個(gè) int 參數(shù)并返回 void 的函數(shù)指針。而 signal 函數(shù)接收一個(gè) int 和一個(gè)函數(shù)指針作為參數(shù)。 第二個(gè)參數(shù)所指向的函數(shù)接收一個(gè) int 參數(shù)并返回 void
哈哈,其實(shí)我想說,即使我們分析清楚了這個(gè)聲明的意義,它依舊像魔鬼一樣難以理解。
歡迎交流任何想法.
End…
總結(jié)
以上是生活随笔為你收集整理的如何读懂 C 语言复杂的声明的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 协议簇:TCP 解析: 基础
- 下一篇: 软件设计开发笔记1:基于状态机的程序设计