如何在 C 中引用深度嵌套的函数指针数组?
How to reference deeply nested function pointer array in C?
我基本上是这样的:
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]();
的事情会产生分段错误。
您似乎在尝试创建一个函数指针数组。代码可能如下所示(部分代码):
ExampleFn *a;
void init()
{
a = malloc(100 * sizeof *a);
a[0] = foo;
}
int main()
{
init();
ExampleFn x = a[0];
x();
}
在标准 C 中,void *
类型仅适用于指向对象类型的指针,不适用于指向函数的指针。
您可以使用与对象类型(例如 see here)相同的方式制作 2-D 或 3-D 锯齿状数组,只需使用 ExampleFn
而不是 int
就像那个例子一样。
我基本上是这样的:
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]();
的事情会产生分段错误。
您似乎在尝试创建一个函数指针数组。代码可能如下所示(部分代码):
ExampleFn *a;
void init()
{
a = malloc(100 * sizeof *a);
a[0] = foo;
}
int main()
{
init();
ExampleFn x = a[0];
x();
}
在标准 C 中,void *
类型仅适用于指向对象类型的指针,不适用于指向函数的指针。
您可以使用与对象类型(例如 see here)相同的方式制作 2-D 或 3-D 锯齿状数组,只需使用 ExampleFn
而不是 int
就像那个例子一样。