C:如何为具有可变参数计数的函数使用单个函数指针数组?

标签 c arrays function-pointers

这个问题几乎说明了一切。

我不确定该怎么做,也没有找到任何可行的方法。

下面是一些示例函数:

add(int x, int y) {
  return x+y;
}

和,

mean(int x1, int y1, int x2, int y2) {
  return (x1 + y1 + x2 + y2) / 4;
}

到目前为止,我已经尝试将 typedef 与这两种类型一起使用,但我无法弄清楚如何使某物指向其中一种类型:

typedef int (*mathfunc2)(int x, int y);
typedef int (*mathfunc4)(int x1, int y1, int x2, int y2);

????? func_table[2] = {add, mean};

最佳答案

您需要选择一个函数指针类型用作“通用函数指针”,使用该类型定义您的数组,并使用显式转换。将一种函数指针类型强制转换为另一种然后再返回可以保证保留值。

换句话说:

typedef int (*generic_fp)(void);

generic_fp func_table[2] = { (generic_fp)add, (generic_fp)mean };

然后调用add,你需要把它转换回正确的类型:

result = ((mathfunc2)func_table[0])(x, y);

如果你觉得更可口,你可以定义一些宏:

#define FUNC_2(f, p1, p2) ((mathfunc2)(f))(p1, p2)
#define FUNC_4(f, p1, p2, p3, p4) ((mathfunc4)(f))(p1, p2, p3, p4)

result = FUNC_2(func_table[0], x, y);

关于C:如何为具有可变参数计数的函数使用单个函数指针数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7670766/

相关文章:

javascript - 是否有与 CrossBridge 类似的项目,但只使用 Javascript 而不是 Flash?

c - 需要帮助了解位重置功能

python - NumPy boolean 数组警告?

c - 在 Automake 中指定要链接的确切库

c++ - 如何在没有 Visual Studio 的情况下在 Windows 上的 cmd 中编译和运行 C/C++ MPI 代码

python - 如何计算数字数组的对数阶乘

.net - 如何在PowerShell中将字符串内容拆分为字符串数组?

c - 我应该将一个接受参数的函数分配给接受 void 的函数指针吗?

c++ - 将指向函数的指针转换为指向函数类型的不同指针的结果

c++ - 如何使指针指向非成员函数?