This was asked to me in an interview! i really got confused
Using typedefs as Christopher tells you is really th only humane way of declaring such a thing. Without tyedefs , it'll become:
char *(*(*arr[10])(void ))(void );
(yes I had to cheat and ran cdecl> declare arr as array 10 of pointer to function(void) returning pointer to function(void) returning pointer to char )