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

C++ 函數指針詳解:定義、調用與回調應用

     編輯:關於C++

什麼是函數指針

函數在內存中佔據一塊代碼區,其入口地址即為函數指針。定義一個指針變量指向該地址,即可通過指針調用函數,實現動態綁定與回調。

聲明語法

返回類型 (*指針名)(參數列表);

例如:

  • int (*p)(); — 指向無參、返回 int 的函數
  • float (*q)(float, int); — 指向接受 float,int 並返回 float 的函數

基本用法示例

#include <cstdio>

int arr_add(int (*arr)[4], int n, int m) {
    int sum = 0;
    for (int i = 0; i < n; ++i)
        for (int j = 0; j < m; ++j) sum += arr[i][j];
    return sum;
}

int main() {
    int a[3][4] = {{1,3,5,7},{9,11,13,15},{17,19,21,23}};
    int (*pt)(int(*)[4], int, int) = arr_add; // 指針指向函數
    printf("直接調用: %d\n", arr_add(a, 3, 4));
    printf("指針調用: %d\n", (*pt)(a, 3, 4)); // 解引用調用
    return 0;
}

兩大核心用途

  1. 動態調用:運行時根據條件決定調用哪個函數
  2. 回調函數:作為參數傳遞給其他函數,實現「好萊塢原則」(Don't call us, we'll call you)

作為參數傳遞

void process(int (*func)(int), int val) {
    printf("結果: %d\n", func(val));
}

int square(int x) { return x * x; }
int cube(int x) { return x * x * x; }

int main() {
    process(square, 5); // 輸出 25
    process(cube, 3);   // 輸出 27
}

注意事項

  • 指針類型必須與目標函數簽名完全匹配(返回類型、參數類型、參數個數)
  • 同一指針可在不同時刻指向不同兼容函數
  • 調用時 *pt 和 pt 效果相同,編譯器自動解引用

函數指針是 C/C++ 實現多態、事件驅動、插件架構的基石,熟練掌握其聲明與調用語法至關重要。

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