"int *p(char *a)" & "char (*p)(int *a)" mean?
This code is written to trip you up since beginners think "p" means "pointer". Because of that assumption, you can't read this code.
is a function named "p" that takes a char* argument "a" and returns a pointer to an int. You would have no problem were it written like this:
- int *MyFunction(char *arg)
This one:
defines "p" to be a pointer to a function that takes an int* arguments "a" and returns a char.
I expect I am doing your homework, but at least now you know.