乐闻世界logo
搜索文章和话题

C语言中函数指针和回调函数的实现原理是什么?

2月18日 17:13

C语言中函数指针和回调函数的实现原理是什么?

函数指针基础:

  1. 函数指针声明

    c
    // 返回类型 (*指针名)(参数列表) int (*func_ptr)(int, int); // 指向函数的指针 int add(int a, int b) { return a + b; } func_ptr = add; // 通过指针调用函数 int result = func_ptr(3, 5); // 等同于 add(3, 5)
  2. 函数指针数组

    c
    int (*operations[])(int, int) = {add, subtract, multiply}; int result = operations[0](10, 5); // 调用 add
  3. 作为函数参数

    c
    void process_array(int *arr, int size, int (*callback)(int)) { for (int i = 0; i < size; i++) { arr[i] = callback(arr[i]); } }

回调函数实现:

  1. 排序回调

    c
    int compare_asc(const void *a, const void *b) { return (*(int*)a - *(int*)b); } int arr[] = {5, 2, 8, 1, 9}; qsort(arr, 5, sizeof(int), compare_asc);
  2. 事件处理回调

    c
    typedef void (*EventHandler)(void); void on_click() { printf("Button clicked!\n"); } void register_event(EventHandler handler) { handler(); // 触发回调 }
  3. 异步操作回调

    c
    typedef void (*AsyncCallback)(int result, void *user_data); void async_operation(AsyncCallback callback, void *data) { // 模拟异步操作 int result = perform_task(); callback(result, data); }

高级应用:

  1. 状态机实现

    c
    typedef void (*StateHandler)(void); void state_idle() { /* ... */ } void state_running() { /* ... */ } void state_paused() { /* ... */ } StateHandler states[] = {state_idle, state_running, state_paused}; int current_state = 0; states[current_state]();
  2. 策略模式

    c
    typedef int (*Strategy)(int, int); int strategy_max(int a, int b) { return a > b ? a : b; } int strategy_min(int a, int b) { return a < b ? a : b; } void execute_strategy(Strategy strategy, int x, int y) { printf("Result: %d\n", strategy(x, y)); }

注意事项:

  • 函数指针类型必须完全匹配
  • 空指针检查是必要的
  • 回调函数的上下文管理很重要
标签:C语言