c++ - 如何在C中定义函数指针数组

标签 c++ c arrays function-pointers

我有一个小问题。 我正在尝试使用 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/

相关文章:

c - 数组大小可变的结构

arrays - kustomize 修补特定容器而不是通过数组 (/containers/0)

php - 从数据库中检索一条记录

javascript - 将字符串拆分为键值对

c++ - 为什么允许拥有一个自身具有不完整类型静态成员的类?

c++ - bool 函数之前预期的不合格 id?

使用 int64x2_t vector 将低 64 位复制到高 64 位?

c++ - 使用Lua和C++管理堆栈

c++ - 函数指针作为函数参数

c - 将指针分配给另一个指针会更改其值