I won't give you the exact solution, but this should help still:
#include <stdio.h>
typedef int (*funcptr_t)(int, char *);
int func1(int x, char *str);
int func2(int x, char *str);
int func3(int x, char *str);
int main(void)
{
funcptr_t funcarray[3] =
{
func1,
func2,
func3
};
int i;
for (i = 0; i < 3; i++)
{
int ret;
ret = funcarray[i](i * i + 2, "moo");
printf("ret %d\n", ret);
}
return 0;
}
int func1(int x, char *str)
{
printf("func1 x=%d, str=<%s>\n", x, str);
return 1;
}
int func2(int x, char *str)
{
printf("func2 x=%d, str=<%s>\n", x, str);
return 2;
}
int func3(int x, char *str)
{
printf("func3 x=%d, str=<%s>\n", x, str);
return 3;
}
[EDIT]changed i*i to i*i+2 to make it more obvious the input isn't always the index ;-)[/EDIT]