如何在 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 就像那个例子一样。