C style declarations, quickly get difficult to figure out. This website, shows the "clockwise spiral rule" to help ease that problem.
http://c-faq.com/decl/spiral.anderson.html
This is just one example, showing the problem:
Example #2: Pointer to Function declaration
+--------------------+
| +---+ |
| |+-+| |
| |^ || |
char *(*fp)( int, float *);
^ ^ ^ || |
| | +--+| |
| +-----+ |
+------------------------+
Question we ask ourselves: What is fp?
``fp is a...
* Moving in a spiral clockwise direction, the first thing we see is a `)'; therefore, fp is inside parenthesis, so we continue the spiral inside the parenthesis and the next character seen is the `*', so...
``fp is a pointer to...
* We are now out of the parenthesis and continuing in a spiral clockwise direction, we see the `('; therefore, we have a function, so...
``fp is a pointer to a function passing an int and a pointer to float returning...
* Continuing in a spiral fashion, we then see the `*' character, so...
``fp is a pointer to a function passing an int and a pointer to float returning a pointer to...
* Continuing in a spiral fashion we see the `;', but we haven't visited all tokens, so we continue and finally get to the type `char', so...
``fp is a pointer to a function passing an int and a pointer to float returning a pointer to a char''
I am SO glad that the Go language I'm studying atm, has their declarations read ONLY from left to right! This clockwise spiral methodology quickly becomes bizarre once you move beyond simple declarations.