I was looking into simple source code. and found this line
int (*pfds)[2];
does it means pointer to function similar to
void (*fun_ptr)()[2] = &fun;
which I think is array of pointer to function fun(void)
int (*pfds)[2];----> pfds is a pointer to an array of 2 elements.
void (*fun_ptr)()[2]----> Declare fun_ptr as pointer to function returning array of 2 elements of void. But it is invalid. Since, in C, function returning array is not allowed.
void* (*fun_ptr)() -----> declare fun_ptr as pointer to function returning, pointer to void. This is valid. This is what you need, if you want to return an array of type void.
int (*pfds)[2]; is a pointer to an array with two elements.
The parentheses are there because int *pfds[2]; would be an array of two pointers, as in char *argv[] being an array of char pointers (i.e. strings).
A function pointer void (*fun_ptr)() has a second set of parentheses which is used for the argument list: int (*add)(int x, int y).
It doesn't seem void (*fun_ptr)()[2] or void *fun_ptr() would be valid.