Я случайно наткнулся на следующий указатель на функцию.
char (*(*x())[])();
Он выглядит как массив указателя на функцию в следующем формате, но я не вижу, что именно f -> (* x ()) средства. Как интерпретировать этот беспорядочный указатель на функцию?
char (*f[])();
С помощью Джона Боде я сделал следующий пример.
#include
char foo() { return 'a'; }
char bar() { return 'b'; }
char blurga() { return 'c'; }
char bletch() { return 'd'; }
char (*gfunclist[])() = {foo, bar, blurga, bletch};
char (*(*x())[])()
{
static char (*funclist[4])() = {foo, bar, blurga, bletch};
return &funclist;
}
int main()
{
printf("%c\n",gfunclist[0]());
char (*(*fs)[4])();
fs = x();
printf("%c\n",(*fs)[1]());
}
Я смог получить ожидаемый результат.
smcho@prosseek temp2> ./a.out a b
И, вы можете найти лучшую реализацию здесь .