【发布时间】:2018-01-22 20:00:57
【问题描述】:
我试图动态分配一个指向类似函数的指针
void (*f)(void*);
f = (*f)malloc(sizeof(f) * 2);
我遇到了一个错误。
错误:预期为 ';'在“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);
}
【问题讨论】:
-
你能分享一下错误吗?我猜这是因为您没有分配指向指针的指针
-
请提供一个简短的示例程序,其中包含您在帖子中尝试执行的操作的完整源代码。还要指出你真正想要完成的是什么。您可以创建一个变量,然后为其分配一个指向函数的指针,但是您不能动态创建函数、lambda 或闭包,并将其分配给 C 中的变量。
-
您似乎对指针和指针指向的对象之间的区别感到困惑。函数指针指向一个函数。不能动态分配函数。
-
@Xtx sizeof 运算符可能不适用于函数。因此,您可能不会声明函数数组。例如,函数定义在编译时可能是未知的。
-
编译器在
malloc之前抱怨(*f)。那不是演员表(反正也不需要演员表)。
标签: c arrays function pointers malloc