You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用单个函数指针调用多个C语言函数?

使用同一函数指针调用多个函数的实现方法

先看你提供的原始代码:

#include <stdio.h>

int sum(int, int);
int sub(int, int);
int mul(int, int);

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);
}

int main() {
    int (*fptr)(int, int);
    fptr = &sum;
    int val = (fptr)(2,v3);
    printf("Sum: %d", val);
    return 0;
}

要复用同一个fptr调用sum、sub、mul三个函数,其实只需要给这个函数指针重复赋值不同的函数地址就行,另外注意原代码里的v3是未定义变量,得改成合法数值(比如3)。修改后的完整代码如下:

#include <stdio.h>

int sum(int, int);
int sub(int, int);
int mul(int, int);

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);
}

int main() {
    int (*fptr)(int, int);
    int val;
    int num1 = 8, num2 = 3;

    // 调用sum函数
    fptr = sum; // 函数名本身就是地址,&可以省略
    val = fptr(num1, num2);
    printf("Sum: %d\n", val);

    // 调用sub函数
    fptr = sub;
    val = fptr(num1, num2);
    printf("Sub: %d\n", val);

    // 调用mul函数
    fptr = mul;
    val = fptr(num1, num2);
    printf("Mul: %d\n", val);

    return 0;
}

关键说明:

  • 函数指针int (*fptr)(int, int)的类型和sum、sub、mul的函数签名完全一致,所以可以直接赋值函数名(函数名等价于函数的地址,加不加&都可以)
  • 每次调用不同函数前,给fptr重新赋值对应的函数地址,就能用同一个指针执行不同的逻辑
  • 调用函数指针时,fptr(a,b)和(*fptr)(a,b)两种写法都合法,效果完全一样

内容的提问来源于stack exchange,提问作者IndyRose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 02:55:01