這三個術語常令人混淆,關鍵在於「主語」是函數還是指標:
本質是函數,其返回值類型為指標。
int* function(void); // 返回 int* 指標
記憶口訣:「指標修飾函數」→ 函數返回指標。
本質是指標,指向函數的記憶體位址(入口點)。
int (*fp)(int x); // fp 是指標,指向參數為 int、返回 int 的函數
記憶口訣:「函數修飾指標」→ 指標指向函數。
int func(int x); // 一般函數宣告
int (*fp)(int x); // 定義函數指標 fp
fp = func; // 將 func 入口位址賦給 fp(函數名即位址)
fp(10); 等同於 func(10);定義:透過函數指標作為參數傳入另一函數,並在後者內部被呼叫的函數。
核心流程:
| 術語 | 本質 | 關鍵語法特徵 |
|---|---|---|
| 指標函數 | 函數 | 返回類型含 *,如 int* func() |
| 函數指標 | 指標 | 指標名被 () 包裹,如 int (*fp)() |
| 回調函數 | 函數 | 透過函數指標參數被間接呼叫 |