深入解析C語言宣告

2021-05-25 07:58:00 字數 1449 閱讀 4991

如果說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 的區別在 嗎?把後面的答案遮到,想想。也許你知道反正乙個是含有五個指向整型的指標元素的指標陣列,另乙個是指向乙個...