首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 函數指針數組常見錯誤:括號位置與函數名用法

     編輯:程式設計綜合問答

錯誤代碼典型特徵

用戶截圖顯示定義函數指針數組時:

  • 等號左側多加了括號:(*pf[3])() = ...
  • 右側賦值用了函數調用語法:{func1(), func2(), func3()} 而非函數名 {func1, func2, func3}。

正確寫法

// 1. 類型別名法(最清晰)
typedef void (*FuncPtr)();  // 無參無返回
FuncPtr pf[3] = {func1, func2, func3};

// 2. 直接定義
void (*pf[3])() = {func1, func2, func3};

// 3. 使用 std::function (C++11 推薦)
#include <functional>
std::function<void()> pf[3] = {func1, func2, func3};
// 支持 lambda、bind、函數對象,更靈活

調用方式

pf[0]();  // 調用 func1
pf[1]();  // 調用 func2

常見誤區總結

錯誤寫法問題修正
(*pf[3])() = {func1(), ...}左側多括號;右側調用函數而非取地址去掉左括號;右側寫函數名
void *pf[3] = {&func1, ...}類型不匹配(void* 非函數指針)用正確函數指針類型
pf[0] = func1();賦值為調用返回值pf[0] = func1;

進階提示

  • 成員函數指針數組語法不同:void (Class::*pf[3])() = {&Class::func1, ...},調用需對象:(obj.*pf[0])()。
  • 現代 C++ 首選 std::function + std::vector,類型擦除、支持捕獲上下文,避免原始指針陷阱。

總結

函數指針數組定義核心:**左側聲明指針類型,右側賦值函數名(不加括號)**。掌握 typedef 或 using 別名可大幅降低誤寫率。

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