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

C語言函式指針進階:返回函式指針的語法與實戰範例

     編輯:關於C語言

場景

根據操作碼動態選擇並返回對應的運算函式(加/減/乘),並支援執行前回調顯示操作名稱。

核心語法:返回函式指針的函式宣告

int (*operation(int opnum, void (*fun)(int))) (int, int);
解讀:operation 接受 int 與函式指標 void(*)(int),返回 指向函式的指標,該函式簽名為 int (int, int)。

建議使用 typedef 簡化:

typedef int (*BinaryOp)(int, int);
typedef void (*Callback)(int);

BinaryOp operation(int opnum, Callback fun);

完整實作代碼

#include <stdio.h>

char *ops[3] = { "sum", "sub", "mul" };

int sum(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; }
int mul(int a, int b) { return a * b; }

void show(int opnum) { printf("Do the operation:%s\n", ops[opnum]); }

// 返回函式指標
int (*operation(int opnum, void (*fun)(int))) (int, int) {
    fun(opnum); // 執行回調
    switch (opnum) {
        case 0: return sum;
        case 1: return sub;
        case 2: return mul;
        default: return NULL;
    }
}

int main() {
    int a = 33, b = 17;
    printf("Here a=%d, b=%d\n", a, b);
    printf("\tThe result is :%d\n", operation(0, show)(a, b)); // sum
    printf("\tThe result is :%d\n", operation(1, show)(a, b)); // sub
    printf("\tThe result is :%d\n", operation(2, show)(a, b)); // mul
    return 0;
}

執行結果

Here a=33, b=17
Do the operation:sum
	The result is :50
Do the operation:sub
	The result is :16
Do the operation:mul
	The result is :561

關鍵點總結

  1. 函式指標語法:返回類型 (*函式名)(參數列表)。返回函式指標時,函式名被括號包裹。
  2. typedef 簡化:複雜宣告必用 typedef 分層,提升可讀性與維護性。
  3. 回調模式:將「顯示操作名」作為函式指標參數傳入,實現關注點分離(策略模式雛形)。
  4. 應用場景:插件架構、狀態機、事件驅動、泛型演算法自定義比較/操作邏輯。

現代 C++ 替代方案

  • std::function<int(int,int)>:可攜帶捕獲上下文的 Lambda、綁定器、函式物件。
  • auto 推導返回類型(C++14):auto operation(...) -> int(*)(int,int)。
  • 樣板化策略:template<typename Op> void execute(Op op); 零開銷抽象。

總結

C 風格函式指標是底層回調機制的基石。掌握其宣告語法與 typedef 技巧,能構建靈活的動態分發系統。現代 C++ 提供更強大、類型安全的替代品,應根據專案標準選擇。

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