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

C/C++ 函式指標完整指南:定義、陣列應用與回呼實作

     編輯:關於C++

一、函式指標基礎

函式位於程式碼區,擁有位址。函式名稱即為其起始位址(類似陣列名)。

正確宣告語法

int test(int a);
int (*fp)(int a); // 函式指標:指向「接受 int、回傳 int」的函式

常見錯誤: int *fp(int a); 宣告的是「回傳 int* 的函式」,非函式指標。括號優先級關鍵。

基本使用

int test(int a) { return a; }
int main() {
    cout << test << endl; // 印出函式位址
    int (*fp)(int) = test; // 指派
    cout << fp(5) << "|" << (*fp)(10) << endl; // 兩種呼叫語法等價
}

二、typedef 簡化宣告

typedef int (*FP)(int); // 定義型別別名 FP
FP fpi = test;          // 使用型別別名宣告變數
cout << fpi(5) << "|" << (*fpi)(10) << endl;

三、函式指標作為參數:回呼模式

int test(int a) { return a - 1; }
int test2(int (*ra)(int), int b) { // ra 為函式指標參數
    return ra(10) + b; // 呼叫傳入的函式
}
int main() {
    typedef int (*FP)(int);
    FP fpi = test;
    cout << test2(fpi, 1) << endl; // 輸出 10
}

此模式廣泛用於回呼函式、演算法自訂比較/處理邏輯(如 qsort、STL 演算法)。

四、函式指標陣列:跳躍表與命令派發

一般指標陣列 void* a[] = {t1,t2,t3}; 僅存放位址,無法直接呼叫 a[0]()。必須宣告為函式指標陣列:

void t1() { cout << "test1"; }
void t2() { cout << "test2"; }
void t3() { cout << "test3"; }

typedef void (*FP)(); // 定義無參無傳回函式指標型別
FP funcs[] = {t1, t2, t3}; // 函式指標陣列

funcs[0](); // 呼叫 t1
funcs[1](); // 呼叫 t2

應用場景: 狀態機、命令派發、選單系統、中斷向量表。

五、關鍵總結

  1. 函式指標宣告核心:回傳型別 (*指標名)(參數列),括號不可省略。
  2. typedef 大幅提升可讀性,尤其用於參數與陣列宣告。
  3. 函式指標實現執行期多型,是 C 風格回呼與物件導向虛擬函式的基礎。
  4. 函式指標陣列必須使用正確的函式指標型別,而非 void* 陣列。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved