Here is a great article about how to read complex declarations in C: http://www.codeproject.com/KB/cpp/complex_declarations.aspx
It helped me a lot!
Especially – You should read “The right rule” section. Here quote:
int * (* (*fp1) (int) ) [10];
This can be interpreted as follows:
- Start from the variable name ————————– fp1
- Nothing to right but ) so go left to find * ————– is a pointer
- Jump out of parentheses and encounter (int) ——— to a
function that takes an int as argument- Go left, find * —————————————- and returns a pointer
- Jump put of parentheses, go right and hit [10] ——– to an array of
10- Go left find * —————————————– pointers to
- Go left again, find int ——————————– ints.