我有一个如下所示的数组:
void* functions[]; // pointer to functions, each function returns an int and has int parameters A and B
我想将其转化为以下内容:
int (*F)(int a, int b) = ((CAST HERE) functions)[0];
int result = F(a, b);
我已经尝试将“(int (*)(int, int))”作为转换,但编译器提示我正在尝试将函数指针用作数组。
最佳答案
对函数类型使用 typedef 会有所帮助:
typedef int F_type(int, int);
然后你可以这样写:
F_type *F = (F_type *)(functions[0]);
在使用索引运算符之前尝试将 functions
转换为其他内容将是未定义的行为(严格的别名冲突)。
请注意,标准 C 不支持将 void *
转换为函数指针。如果可能,首先让数组成为函数指针:
F_type *functions[] = { &func1, &func2 };
注意。有些人更喜欢对函数指针类型使用 typedef,而不是函数类型。我认为避免指针类型定义会使代码更具可读性,但我提到这一点是为了让您理解其他建议。
关于c - void* 函数指针数组转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46387016/