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

如何创建函数指针数组?掌握函数指针但不知数组实现方法

嘿,我来帮你搞定函数指针数组的问题!你已经写好了基础的算术函数,其实把它们放进数组里比你想的简单,关键是要匹配好函数的签名(返回值和参数列表)。

完整的可运行代码

#include <stdio.h>

double add(double a, double b) { return a + b; }
double sub(double a, double b) { return a - b; }
double mult(double a, double b) { return a * b; }
double div(double a, double b) { 
    if (b == 0) {
        printf("Error: Division by zero!\n");
        return 0;
    }
    return a / b; 
}

int main() {
    // 定义函数指针数组:每个元素都是指向"接受两个double、返回double"函数的指针
    double(*func_array[])(double, double) = {add, sub, mult, div};
    
    // 计算数组长度,避免硬编码下标
    int array_size = sizeof(func_array) / sizeof(func_array[0]);
    
    double x = 10.0, y = 2.0;
    
    // 遍历数组调用每个函数
    for (int i = 0; i < array_size; i++) {
        double result = func_array[i](x, y);
        printf("Operation %d result: %.2f\n", i, result);
    }
    
    return 0;
}

核心知识点拆解

  • 函数指针数组的定义语法:double(*func_array[])(double, double)
    别被括号搞晕了:func_array 是一个数组,数组里的每个元素是 (*)——也就是指向函数的指针,这个函数必须接受两个double参数,返回double类型。括号必须加,不然会变成“返回double数组的函数”,完全不是我们要的东西。
  • 初始化数组:直接把函数名(add、sub这些)丢进去就行!函数名本身就是指向该函数的指针,写&add也可以,但没必要,效果完全一样。
  • 调用数组里的函数:func_array[i](x, y)就像调用普通函数一样,先通过下标拿到对应的函数指针,再传参数执行就行。

让代码更清爽的小技巧

如果觉得定义数组的语法太绕,可以先给函数指针类型起个别名:

typedef double(*ArithmeticFunc)(double, double);

之后数组定义就简化成:

ArithmeticFunc func_array[] = {add, sub, mult, div};

这样可读性一下子就上来了,团队协作的时候也不容易出错~

另外,记得给除法加个除零判断,不然输入y=0的时候程序会崩哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:31:26