我试图动态地分配一个指向这样的函数的指针
void (*f)(void*);
f = (*f)malloc(sizeof(f) * 2);
我得到了一个错误。
error: expected ';' before 'malloc'
我搜索后发现,我们不能动态分配一个函数指针,只能像数组一样声明。第一步,我将它声明为一个函数数组
void (f[2])(void*);
我看到我遇到了另一个错误,我不能声明一个函数数组,我必须将它声明为一个函数指针数组。
void (*f[2])(void*);
在我的搜索中我也发现,指向函数的指针不指向数据,它指向代码。 如果有人能向我解释为什么我们不能动态分配一个指向函数的指针,以及为什么我们不能有一个函数数组而不是函数指针数组。
我的代码如下:
#include <stdio.h>
#include <stdlib.h>
void printNr(void *nr)
{
printf("%i\n", nr);
}
void printChar(void *ch)
{
printf("%c\n", ch);
}
int main(void)
{
void (*f)(void*);
f = (*f)malloc(sizeof(f) * 2);
f = printNr;
(f + 1) = printChar;
(*f)(15);
(*(f + 1))('t');
return (0);
}
最佳答案
如果要为指向 int
的指针数组动态分配空间,则需要 double **(指向指针的指针)
int **arr = malloc(sizeof(*arr) * n);
对于指向函数的指针数组也是如此,您需要一个双 ** 然后取消引用以获取 sizeof
:
#include <stdio.h>
#include <stdlib.h>
void fn1(void *val)
{
puts((char *)val);
}
void fn2(void *val)
{
puts((char *)val);
}
int main(void)
{
void (**f)(void*);
f = malloc(sizeof(*f) * 2);
f[0] = fn1;
f[1] = fn2;
f[0]("Hello");
f[1]("Bye");
free(f);
return 0;
}
关于c - 为什么我们不能动态分配一个指向函数的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45683696/