CPallini
[обновление]
Без typedef
, соответствующий запросу OP:
#include <stdio.h>
void f(){ printf("hello\n"); }
void (*pf[])()={ f };
void (**g())(){ return pf; }
void (**(*pg[])())() = { g };
int main()
{
pg[0]()[0]();
}
[/обновление]
Настолько безумно, насколько это возможно...
#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}; // array of functions returning array of functions...
printf("%d\n", a[1]()[0](10,5)); // calls 'sub(10,5)'
return 0;
}