The expression defines a pointer to an array of 2x2 function pointers. See http://www.newty.de/fpt/fpt.html#arrays for an introduction to C / C ++ functions (and their arrays) in pointers.
In particular, given the declaration of the function
int* foo(int a, int b);
You define a pointer to the ptr_to_foo function (and assign it the address foo) as follows:
int* (*ptr_to_foo)(int, int) = &foo;
Now, if you need not only one function pointer, but also an array of them (let it be a 2 x 2 2D array):
int* (*array_of_ptr_to_foo[2][2])(int, int); array_of_ptr_to_foo[0][0] = &foo1; array_of_ptr_to_foo[0][1] = &foo2; /* and so on */
Apparently, this is not enough. Instead of an array of function pointers, we need a pointer to such an array. And it will be:
int* (*(*p)[2][2])(int, int); p = &array_of_ptr_to_foo;
source share