我有个小问题. 我试图用calloc动态定义函数指针array. 但是我不知道怎么写语法. 非常感谢.

推荐答案

函数指针的类型与函数声明类似,但函数名用"(*)"代替.因此,一个指向:

int foo( int )

将是:

int (*)( int )

要命名此类型的实例,请将名称放在星号后面的(*)内,因此:

int (*foo_ptr)( int )

声明一个名为foo_ptr的变量,该变量指向这种类型的函数.

数组遵循普通的C语法,将括号放在变量标识符附近,因此:

int (*foo_ptr_array[2])( int )

声明一个名为FOO_PTR_ARRAY的变量,它是一个由2个函数指针组成的array.

语法可能会变得非常混乱,因此通常更容易为函数指针创建一个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中的整字母后缀i是什么

我可以动态分配具有空类型函数的矩阵吗?

修改pGM使用指针填充2-D数组但不起作用

ISO_C_BINDING,从Fortran调用C

有效地计算由一组点构成的等边三角形和等腰三角形的数量

C:scanf(%d&q;,...)输入只有一个减号

我应该如何解决我自己为iOS编译的xmlsec1库的问题?转换Ctx.first在xmlSecTransformCtxPrepare()之后为空

这是一个合法的C Strdup函数吗?

用C宏替换strncMP函数中的参数

理解C版宏(看起来像未声明的变量?)

在Apple Silicon上编译x86的Fortran/C程序

为什么双精度d=flt_max+flt_max;在c语言中得到inf的结果

如何编写一个for循环来计算C中各项的总和?

C代码在字符串中删除不区分大小写的子字符串的问题

将回调/基于事件的C API转换为非回调API

为四维数组中的Dim-1和Dim-3重新分配空间

带有数组指针的 struct 在print_stack()函数中打印随机数

C循环条件内的函数

execve 不给出which命令的输出

获取 struct 中匿名 struct 的大小