void (*fp)(); // 無參無返
void (*fp2)(int); // 一 int 參無返
typedef void (*FP)(); // 推薦 typedef 簡化
FP fp3;
賦值:fp = &f1 或 fp = f1(隱式轉換)。
調用:fp() 或 (*fp)(),前者更簡潔靈活。
參數類型、返回類型、調用約定必須精確匹配。
fp2 = &f1; // 錯誤:void(*)(int) vs void(*)()
編譯器報錯 C2440,避免運行時災難。
bool less(int a, int b) { return a < b; }
bool greater(int a, int b) { return a > b; }
int arr[] = {3,2,1,8,9};
std::sort(arr, arr+5, less); // 升序
std::sort(arr, arr+5, greater); // 降序
std::sort 接受二元謂詞(函數指針/函數對象/lambda),核心邏輯與比較策略解耦,極致靈活。
回調函數本質即函數指針,廣泛用於 OS API、事件驅動、插件架構。
當比較函數是類成員時,&A::func 類型為 bool (A::*)(int,int),無法直接傳給 std::sort。
這引出了成員函數指針的完整體系與適配挑戰——詳見系列下篇。