我有一个小问题。 我正在尝试使用 calloc 动态定义函数指针数组。 但我不知道如何写语法。 非常感谢。
最佳答案
函数指针的类型与函数声明类似,但用“(*)”代替函数名。所以指向:
int foo( int )
将是:
int (*)( int )
为了命名该类型的实例,请将名称放在星号后面的 (*) 内,因此:
int (*foo_ptr)( int )
声明一个名为 foo_ptr 的变量,它指向该类型的函数。
数组遵循将括号放在变量标识符附近的普通 C 语法,因此:
int (*foo_ptr_array[2])( int )
声明一个名为 foo_ptr_array 的变量,它是一个包含 2 个函数指针的数组。
语法可能会变得非常困惑,因此通常更容易对函数指针进行 typedef,然后声明它们的数组:
typedef int (*foo_ptr_t)( int );
foo_ptr_t foo_ptr_array[2];
在任一示例中,您都可以执行以下操作:
int f1( int );
int f2( int );
foo_ptr_array[0] = f1;
foo_ptr_array[1] = f2;
foo_ptr_array[0]( 1 );
最后,您可以使用以下任一方法动态分配数组:
int (**a1)( int ) = calloc( 2, sizeof( int (*)( int ) ) );
foo_ptr_t * a2 = calloc( 2, sizeof( foo_ptr_t ) );
注意第一行中额外的 *,将 a1 声明为指向函数指针的指针。
关于c++ - 如何在C中定义函数指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47961506/