C is sometimes castigated for the syntax of its declarations, particularly ones that involve pointers to functions. The syntax is an attempt to make the declaration and the use agree; it works well for simple cases, but it can be confusing for the harder ones, because declarations cannot be read left to right, and because parentheses are over-used. The difference between int *f() and int (*pf) illustrates the problem
x: array of pointer to function returning pointer to array of char
— Kernighan & Ritchie, The C Programming Language, 2nd Edition, Chapter 5 (Pointers and Arrays), section 5.12 (Complicated Declarations).
(Sorry that the Category for this posting is “C language” rather than C; as far as I can make out, WordPress ignores !isalnum() characters when determining uniqueness, and won’t let me add a “C” category because I already have “C++”.)