如果說C語言聲明很簡單的人不是牛人就是還沒入門。本文來講解C語言的聲明的一些基本內(nèi)容,很多內(nèi)容參考《c專家編程》。首先由一個最簡單的問題引入,你知道 int * p[5] 和 int (*p)[5] 的區(qū)別在哪里嗎?把后面的答案遮到,想想。也許你知道反正一個是含有五個指向整型的指針元素的指針數(shù)組,另一個是指向一個擁有5個整型元素的數(shù)組的指針,具體呢? int *p[5]是一個含有五個整型指針的數(shù)組,int(*p)[5]是一個指向5個整型元素的數(shù)組指針。如果你能分清楚,恭喜你,你起碼是入門級以上的水平。那這個呢, char * const *(*next)()? 如果你能把上面這句聲明清清楚楚明明白白的說出來,下面你不用看了,下面的東西對你來說都是廢話。 首先我們需要理解C語言的聲明的優(yōu)先級規(guī)則,如下: A 聲明從它的名字開始讀取,然后按照優(yōu)先級順序來依次讀取。 B 優(yōu)先級從高到底依次是: B.1 生命中被括號括起來的那部分 B.2 后綴操作符 括號()表示這是一個函數(shù),而方括號[]表示這是一個數(shù)組 B.3 前綴操作符: 星號*表示 指向...的指針 C 如果const在指針星號前他作用于指針指向的變量,如果const在指針星號后他作用于指針 另一種說法是,const修飾的是它前面的類型,如果它前面沒有類型則修飾的是緊跟其后的類型 如 const int * a; int const * a; int * const a;前兩個const在*之前,指針所指向的變量是只讀,最后一個是指針本身只讀。 我們開始解析上面的聲明 適用規(guī)則 解釋 A 首先,看變量名"next",并注意到它直接被括號所括住 B.1 所以先把括號里面的東西作為一個整體,得出"next是一個指向...的指針" B 然后考慮括號外面的東西,在星號前綴和括號后綴之間做出選擇 B.2 規(guī)則告訴我們優(yōu)先級較高的是右邊的函數(shù)括號,所以得出"next是一個函數(shù)指針,指向一個返回...的函數(shù)" B.3 然后,處理前綴"*",得出指針所指的內(nèi)容 C 最后,把"char * const"解釋為指向字符的常量指針 所以綜上所述,這個式子的真正的含義是:next是一個指針,它指向一個函數(shù),該函數(shù)返回另一個指針,該指針指向一個類型為char的常量指針。 其實理解這個最基本的優(yōu)先級是需要理解的運算符的優(yōu)先級:如下順序 操作符 結(jié)合性 () [] -> . 左到右 ! - ++ -- + - * & sizeof 右到左 * / % 左到右 + - 左到右 << >> 左到右 < <= > >= 左到右 == != 左到右 & 左到右 ^ 左到右 | 左到右 && 左到右 || 左到右 ?: 右到左 = += -= *= /= %= ^= |= <<= >>= 右到左 , 左到右 原文來源:http://blog.csdn.net/huiguixian/archive/2011/05/14/6419261.aspx |
|
來自: e3399 > 《CLanguage》