語法:型別 *函式名(參數表)。例:int* func(int x, int y) 回傳指向 int 的指標。注意 * 僅修飾回傳型別,非函式名一部分。
函式在記憶體佔有儲存區,有起始位址(入口點)。函式指標儲存此位址,使函式可被間接呼叫、作為參數傳遞、儲存於陣列/結構中。
int (*p)(); // 指向無參、回傳 int 的函式
int (*p)(int, int); // 指向雙 int 參、回傳 int 的函式
括號不可省:int *p() 會被解析為「回傳 int* 的函式 p」。
Max(2,9)p = Max; p(2,9) 或 (*p)(2,9)

Debug 模式下,編譯器為函式指標產生跳躍表(JMP 指令),導致指標值非直接函式位址。Release 模式通常優化為直接位址。
int (*p)(int) = (int (*)(int))Max; // 強制雙參轉單參(危險!)
int a = ((int (*)(int, int))p)(2, 9); // 呼叫時再轉回
型別轉換雖可通過編譯,但參數不匹配會導致未定義行為,實務上應避免。

透過函式指標將「比較演算法」參數化:
void Sort(void* base, size_t n, size_t sz, int (*cmp)(const void*, const void*)) {
// 排序邏輯固定,比較策略由 cmp 決定
}
呼叫端可傳入不同比較函式(升序、降序、自訂鍵值),實現演算法與業務邏輯解耦。這是 C 語言實現「策略模式」的核心技術,也是 qsort、bsearch 等標準庫函式的設計基石。
+/- 無意義)。typedef 簡化複雜宣告:typedef int (*CmpFunc)(const void*, const void*);