從變數名出發,順時針螺旋閱讀:先看右邊 [ ] ( ),再看左邊 *,最後看類型。
| 代碼 | 含義 |
|---|---|
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)
a 開始:a 是 …(int,int) → a 是函式,參數兩 int。* → 回傳指標。(int) → 該指標指向函式,參數 int。int → 該函式回傳 int。結論:a 是函式指標,指向接受兩 int 並回傳函式指標的函式,後者接受 int 回傳 int。
typedef 分層簡化:typedef int (*FuncPtr)(int);typedef FuncPtr (*HigherFunc)(int,int);HigherFunc a;std::function、auto、lambda 替代複雜函式指標。