首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C 語言聲明優先級規則完全掌握

     編輯:關於C

聲明解析核心規則

三步走策略

  1. 從變量名開始
  2. 按優先級由高到低解析
  3. 遇到括號優先處理括號內內容

優先級表(高→低)

級別符號含義結合性
1()函數參數列表 / 分組左→右
2[]數組下標左→右
3*指針修飾(前綴)右→左
4類型關鍵字int, char, struct 等—

const/volatile 綁定規則

  • 緊跟類型關鍵字時修飾類型:const int = 常量整數
  • 否則修飾左側最近的 *:int *const = 常量指針

經典案例解析

案例 1:int *a[2]

  1. 從 a 開始
  2. [] 優先:a 是數組,大小 2
  3. * 修飾數組元素:元素類型為 int*
  4. 結論:指向 int 的指針數組

案例 2:char *(*c[10])(int **p)

  1. 從 c 開始
  2. []:c 是數組 [0..9]
  3. *(括號內):數組元素是指針
  4. ():指向函數的指針,參數 int**
  5. *(最外層):函數返回 char*
  6. 結論:函數指針數組,函數參數為 int**,返回 char*

案例 3:int (*p)[3] vs int *p[3]

  • int (*p)[3]:() 提升優先級 → p 是指針 → 指向 int[3] 類型 → 二維數組指針(行指針)
  • int *p[3]:[] 優先 → p 是數組 → 元素為 int* → 指針數組

快速判斷口訣

"先括號,後後綴,再前綴,最後類型"
括號改變優先級,[] 和 () 同級左結合,* 右結合

實用技巧:typedef 簡化聲明

typedef int (*FuncPtr)(int, double);  // 函數指針類型
typedef int (*ArrayPtr)[3];           // 行指針類型
FuncPtr fp;  // 清楚明瞭
ArrayPtr ap;

練習題

  1. void (*signal(int, void(*)(int)))(int) — 信號處理函數原型
  2. char (*(*x())[])() — 函數返回指向函數指針數組的指針
  3. int *const *(*const *p)[5] — 多層指針與 const 混合

建議配合 cdecl 工具或在線解析器驗證複雜聲明。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved