1. int (*q(char*)) = q is a function which take character pointer as argument and return pointer to Integer.
2. int *q(char*)[] = declare q as function (pointer to char) returning array of pointer to int
3. int (*q)(char*)[] = declare q as pointer function (pointer to char) returning array of int
Reffer :http://cdecl.org/
Correct would be :
int (*q(char *))[] = declare q as function taking character pointer as argument and returning pointer to array of int