既出だが、Cの宣言は初心者にはわかりずらいんじゃないかと思う。
//int型を指すポインタhoge
int *hoge;
//int型を返し、文字列の先頭ポインタを引数に取る関数を指すポインタfunc
int (*func)(char *str);
//char型のポインタを返し、文字列の先頭ポインタを引数に取る関数を指すポインタfunc
char *(*func)(char const *str);//ポインタはconst
なので、C形式の宣言文は却下したい。
ただ、1はポインタを使いたいと願っている。
つまり、上記より簡単なポインタ向きの宣言文を考えなきゃいけない。

//後ろにPを付けてみるテスト。
int Coffee P;
//int型を返し、文字列の先頭ポインタを引数に取る関数へのポインタ
int func P ( char str P );
//char型のポインタを返し、文字列の先頭ポインタを引数に取る関数へのポインタ
char P func P ( char const str P );//ポインタはconst

これで少しはましになったと思うがどうか?
見ている人がいたら意見を願う。