如何在C中定义一个函数指针数组

我有一个小问题 我试图用callocdynamic定义一个函数指针数组。 但是我不知道如何编写语法。 非常感谢。

函数指针的types就像函数声明一样,但用“(*)”代替函数名称。 所以指向:

 int foo( int ) 

将会:

 int (*)( int ) 

为了命名这个types的实例,把名字放在星号(*)后面,所以:

 int (*foo_ptr)( int ) 

声明一个名为foo_ptr的variables指向这种types的函数。

数组遵循正常的将括号放在variables标识符附近的C语法,所以:

 int (*foo_ptr_array[2])( int ) 

声明一个名为foo_ptr_array的variables,它是一个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 ); 

最后,你可以dynamic地分配一个数组:

 int (**a1)( int ) = calloc( 2, sizeof( int (*)( int ) ) ); foo_ptr_t * a2 = calloc( 2, sizeof( foo_ptr_t ) ); 

注意第一行额外的*来声明a1作为函数指针的指针。

你会声明一个函数指针数组为

 T (*afp[N])(); 

对于某些types的T 既然你dynamic分配数组,你可以做类似的事情

 T (**pfp)() = calloc(num_elements, sizeof *pfp); 

要么

 T (**pfp)() = malloc(num_elements * sizeof *pfp); 

然后你可以调用每个函数

 T x = (*pfp[i])(); 

要么

 T x = pfp[i](); // pfp[i] is implicitly dereferenced 

如果你想成为非正统的,你可以声明一个指向函数指针数组的指针,然后如下分配:

 T (*(*pafp)[N])() = malloc(sizeof *pafp); 

尽pipe在进行调用时您必须遵守数组指针:

 x = (*(*pafp)[i])(); 

我在这里举了一个小例子,可以帮助你

 typedef void (*fp)(int); //Declares a type of a void function that accepts an int void test(int i) { printf("%d", i); } int _tmain(int argc, _TCHAR* argv[]) { fp function_array[10]; //declares the array function_array[0] = test; //assings a function that implements that signature in the first position function_array[0](10); //call the cuntion passing 10 } 
 typedef R (*fptr)(A1, A2... An); 

其中R是返回types,A1,A2 … An是参数types。

 fptr* arr = calloc(num_of_elements,sizeof(fptr)); 

假设你所有的函数都是void ()(void) ,就像这样

 typedef void (*fxptr)(void); fxptr *ptr; // pointer to function pointer ptr = malloc(100 * sizeof *ptr); if (ptr) { ptr[0] = fx0; ptr[1] = fx1; /* ... */ ptr[99] = fx100; /* use "dynamic array" of function pointers */ free(ptr); }