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