如何创建函数指针数组?掌握函数指针但不知数组实现方法
嘿,我来帮你搞定函数指针数组的问题!你已经写好了基础的算术函数,其实把它们放进数组里比你想的简单,关键是要匹配好函数的签名(返回值和参数列表)。
完整的可运行代码
#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
相关产品推荐
相关产品推荐

