理解C語言聲明的優先級規則(一個複雜的例子)

A  聲明從它的名字開始讀取,然後按照優先級順序依次讀取;

B  優先級從高到低依次是:

        B.1  聲明中被括號括起來的那部分

        B.2  後綴操作符;

                        括號()表示這是一個函數,而

                       方括號[] 表示這是一個數組。

         B.3   前綴操作符; 星號 * 表示“指向...的指針”。

C  如果const 和 ( 或 ) volatile 關鍵字的後面緊跟類型說明符 (如 int, long等),那麼它作用於類型說明符。在其他情況下,const 和 ( 或 ) volatile 關鍵字作用於它左邊緊鄰的指針星號。


用優先級規則分析C語言聲明一例:

  char * const * ( *next ) ( ) ;

首先,看變量名"next", 並注意到它直接被括號所括住;所以先把括號裏的東西作爲一個整體,得出“next 是一個指向 ...的指針"。

然後考慮括號外面的東西,在星號前綴和括號後綴之間做出選擇。

B.2規則告訴我們優先級較高的是右邊的函數括號,所以得出”next是一個函數指針,指向一個返回...的函數”。

然後,處理前綴“*”,得出指針所指的內容。

最後,把"char * const" 解釋爲指向字符的常量指針。

把上述分析結果加以概括,這個聲明表示“next是一個指針,它指向一個函數,該函數返回另一個指針,該指針指向一個類型爲 char 的常量指針”,大功告成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章