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

C語言指標宣告完全指南:從基礎到函式指標陣列

     編輯:關於C語言

右左法則(Clockwise/Spiral Rule)

從變數名出發,順時針螺旋閱讀:先看右邊 [ ] ( ),再看左邊 *,最後看類型。

11 種宣告逐一解析

代碼含義
int a;整數變數
int *a;指向 int 的指標
int **a;指向「指向 int 的指標」的指標
int a[10];10 個 int 的陣列
int *a[10];10 個「指向 int 的指標」的陣列
int (*a)[10];指向「10 個 int 的陣列」的指標
int (**a)[10];指向「指向 10-int 陣列的指標」的指標
int *(*a)[10];指向「10 個 int 指標的陣列」的指標
int (*a)(int);指向「參數 int、回傳 int 的函式」的指標
int (*a[10])(int);10 個「參數 int、回傳 int 的函式指標」的陣列
int (*(*a)(int,int))(int);指向「參數兩 int、回傳『參數 int、回傳 int 的函式指標』的函式」的指標

複雜宣告拆解範例

int (*(*a)(int,int))(int)

  1. 從 a 開始:a 是 …
  2. 右邊 (int,int) → a 是函式,參數兩 int。
  3. 左邊 * → 回傳指標。
  4. 右邊 (int) → 該指標指向函式,參數 int。
  5. 最左 int → 該函式回傳 int。

結論:a 是函式指標,指向接受兩 int 並回傳函式指標的函式,後者接受 int 回傳 int。

實務建議

  • 使用 typedef 分層簡化:
    typedef int (*FuncPtr)(int);
    typedef FuncPtr (*HigherFunc)(int,int);
    HigherFunc a;
  • 現代 C++ 推薦用 std::function、auto、lambda 替代複雜函式指標。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved