这个问题几乎说明了一切。
我不确定该怎么做,也没有找到任何可行的方法。
下面是一些示例函数:
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/