How define an array of function pointers in C

I've a little question. I'm trying to define an array of function pointers dynamically with calloc . But I don't know how to write the syntax. Thanks a lot.

21.8k 7 7 gold badges 64 64 silver badges 65 65 bronze badges asked Mar 30, 2011 at 15:38 955 2 2 gold badges 11 11 silver badges 17 17 bronze badges Can you show us what you wrote until now? Commented Mar 30, 2011 at 15:42

5 Answers 5

The type of a function pointer is just like the function declaration, but with "(*)" in place of the function name. So a pointer to:

int foo( int ) 
int (*)( int ) 

In order to name an instance of this type, put the name inside (*), after the star, so:

int (*foo_ptr)( int ) 

declares a variable called foo_ptr that points to a function of this type.

Arrays follow the normal C syntax of putting the brackets near the variable's identifier, so:

int (*foo_ptr_array[2])( int ) 

declares a variable called foo_ptr_array which is an array of 2 function pointers.

The syntax can get pretty messy, so it's often easier to make a typedef to the function pointer and then declare an array of those instead:

typedef int (*foo_ptr_t)( int ); foo_ptr_t foo_ptr_array[2]; 

In either sample you can do things like:

int f1( int ); int f2( int ); foo_ptr_array[0] = f1; foo_ptr_array[1] = f2; foo_ptr_array[0]( 1 ); 

Finally, you can dynamically allocate an array with either of:

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

Notice the extra * in the first line to declare a1 as a pointer to the function pointer.