[update]
Without
typedef
, conformant to OP request:
#include <stdio.h>
void f(){ printf("hello\n"); }
void (*pf[])()={ f };
void (**g())(){ return pf; }
void (**(*pg[])())() = { g };
int main()
{
pg[0]()[0]();
}
[/update]
As crazy as it can be...
#include <stdio.h>
int add(int a, int b){return a+b;}
int sub(int a, int b){return a-b;}
typedef int (* INT_FUN)(int a, int b);
INT_FUN f[] = {add, sub};
INT_FUN g[] = {sub, add, sub};
INT_FUN * af (){ return f; }
INT_FUN * ag (){ return g; }
typedef INT_FUN * ( *ARR_FUN )();
int main()
{
ARR_FUN a[] = {af, ag};
printf("%d\n", a[1]()[0](10,5));
return 0;
}