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 的常量指針”,大功告成。