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

C語言函數指針實戰:求兩數最大值完整教學

     編輯:關於C

概念解析

函數指針是指向函數代碼入口地址的指針變量。通過函數指針可以實現回調機制、動態綁定、策略模式等高級編程技巧。本範例以「求兩數最大值」為例,演示函數指針的聲明、賦值與調用全過程。

標準代碼實現

#include <stdio.h>

// 目標函數:返回兩整數中的最大值
int max(int a, int b) {
    return (a > b) ? a : b;
}

int main() {
    // 1. 聲明函數指針:指向「接受兩個int,返回int」的函數
    int (*func_ptr)(int, int);

    // 2. 賦值:將 max 函數地址賦給指針(函數名即地址)
    func_ptr = max;

    int a, b, result;
    printf("請輸入兩個整數(空格分隔): ");
    if (scanf("%d %d", &a, &b) == 2) {
        // 3. 通過指針調用函數(兩種等價寫法)
        // result = (*func_ptr)(a, b);  // 顯式解引用
        result = func_ptr(a, b);        // 隱式調用(C99標準推薦)

        printf("最大值 = %d\n", result);
    } else {
        printf("輸入格式錯誤!\n");
    }

    return 0;
}

關鍵語法詳解

函數指針聲明

int (*func_ptr)(int, int);
  • int:返回值類型
  • (*func_ptr):*表示指針,括號提升優先級,func_ptr是變量名
  • (int, int):參數列表類型

易錯點:若寫成int *func_ptr(int, int),則聲明的是一個返回指針的函數,而非函數指針。

賦值與調用

  • 賦值:func_ptr = max; 或 func_ptr = &max;(取地址符可省略)
  • 調用:func_ptr(a, b)(現代風格)或 (*func_ptr)(a, b)(傳統風格)

實際應用場景

1. 回調函數

void sort(int *arr, int n, int (*cmp)(int, int)) {
    // 根據 cmp 策略排序(升序/降序/自定義規則)
}

2. 狀態機/事件驅動

typedef void (*EventHandler)(int event_id);
EventHandler handlers[MAX_EVENTS];
// 動態註冊不同事件處理器

3. 插件架構

主程序通過函數指針表調用動態庫導出的函數,實現模塊解耦。

總結

函數指針是C語言實現多態與動態行為的核心機制。掌握其聲明語法、賦值規則及調用方式,對於閱讀系統級代碼(如Linux內核、嵌入式框架)至關重要。建議練習實現一個簡單的計算器,通過函數指針數組管理+ - * /四則運算,深化理解。

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