【发布时间】:2020-07-24 17:17:24
【问题描述】:
我基本上有这个:
void **a;
typedef void (*ExampleFn)();
void
foo() {
puts("hello");
}
void
init() {
ExampleFn b[100] = {
foo
};
a = malloc(sizeof(void) * 10000);
a[0] = b;
}
int
main() {
init();
ExampleFn x = a[0][0];
x();
}
但是在运行时我会遇到各种各样的错误,例如:
error: subscript of pointer to function type 'void ()'
如何让它工作?
执行((ExampleFn*)a[0])[0](); 之类的操作会导致分段错误。
【问题讨论】:
-
将不是函数的东西分配给函数指针是无效的。做
sizeof(void)也是无效的。除此之外,你想要的是sizeof(void*)和x = a[0]。 -
一个真正的大括号,但返回类型在单独的行上......从未见过
-
**a不是指向 void 函数的指针,它只是一个 void。所以a[0]的类型为void,而a[0][0]试图取消引用一个空指针,这没有意义。然后它尝试为x分配一个void 值,这是一个错误(它甚至意味着什么?) -
a[0] = b;在任何情况下都无法工作,因为b是一个函数指针,而void *只能存储对象指针 -
我如何才能完成我理论上想要完成的事情,因为那时我还有很长的路要走?我从一个大型项目中删除了这个,所以它可能不是 100% 准确的。但它接近我想要做的。
标签: c pointers function-pointers void-pointers jump-table