c - void* 函数指针数组转换

标签 c arrays function pointers function-pointers

我有一个如下所示的数组:

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/

相关文章:

html - C CGI 中的 getenv(QUERY_STRING)

c++ - 为什么函数上的 typeid 可以,而 sizeof 不行

c - 为什么第 22 行是必需的?

c - 在动态分配的结构(数组结构)中分配动态数组

c - 在二维数组中搜索一行中的所有零

PHP:将对象转换为数组会给我数组字段名称和命名空间的索引?

javascript - "(function ( ) { } ) ( )"和 "(function ( ) { } ( ) )"在 JavaScript 中功能相同吗?

python - 如何将运算符传递给python函数?

c - 在c编程中生成等差数列的随机数

c - 如果数组是 char *str[],为什么++str 操作会导致错误,但如果是 char *argv[](主函数的参数之一)则不会?