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

C++ 函數指針完全指南:聲明、調用、類型安全與 STL 實戰

     編輯:關於C++

函數指針基礎


void (*fp)();           // 無參無返
void (*fp2)(int);       // 一 int 參無返
typedef void (*FP)();   // 推薦 typedef 簡化
FP fp3;

賦值:fp = &f1 或 fp = f1(隱式轉換)。
調用:fp() 或 (*fp)(),前者更簡潔靈活。

C++ 類型安全:編譯期守門員

參數類型、返回類型、調用約定必須精確匹配。
fp2 = &f1; // 錯誤:void(*)(int) vs void(*)()
編譯器報錯 C2440,避免運行時災難。

STL 算法中的函數指針:策略模式典範


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。
這引出了成員函數指針的完整體系與適配挑戰——詳見系列下篇。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved