I think it helps to split the problem into two parts.
The first is the general weirdness of function pointer declarations due to their length and use of parentheses.
As a general rule, I always typedef function pointers. It helps to prevent the code getting real messy in a hurry.
Nobody want's to see this, especially when the function takes more arguments.
Code:
INT8U CreateProcess(void (*pProcess)(psMAIL))
Once you have the typedef, then all declarations become single words as per your example.
The second part is just using function pointers, which is the easier part.
Code:
typedef void (*fn)(char data);
void worker( fn myfunc, char mydata[] ) {
myfunc(mydata[0]);
}
void doit( char data) {
}
int main ( ) {
char line[]="hello";
worker(doit,line);
}
It might help you if you think of functions as 'arrays of instructions' which you 'index' with the () operator.
Like a regular data array, passing it to a function is just the name of the function.