3.4 How to decipher a pointer declaration? Ans Section 5.12, Complicated Declarations, of K&R II says: "C is sometimes castigated (criticized) for the syntax of its declaration, particularly ones that involve pointers to functions. ..." Following an extract from a book to which the author calls The Precedence Rule. The Precedence Rule for Understanding C Declaration: A Declarations are read by starting with the name and then reading in precedence order. B The precedence, from high to low, is: B.1 parantheses grouping together parts of a declaration B.2 the postfix operators: parantheses () indicating a function, and square brackets [] indicating an array B.3 the prefix operator: the asterisk denoting "pointer to". C If a const and/or volatile keyword is next to a type specifier (e.g., int, long, etc.) it applies to the type specifier. Other the const and/or volatile keyword applies to the pointer asterisk on its immediate _left_. An example of solving a declaration using the Precedence Rule: char * const * (*next) (); RULE EXPLANATION A First, go the variable name, "next", and note that it is directly enclosed by the parantheses. B.1 So we group it with what else is in the parantheses, to get "next is a pointer to...". B Then we go outside the parantheses, and have a choice of a prefix asterisk, or a postfix of parantheses. B.2 Rule B.2 tells us the highest precedence thing is the function parantheses at the right, so we have "next is pointer to a function returning...". B.3 The process the prefix "*" to get "pointer to". C Finally, take the "char * const", as constant pointer to a char. Then put it all together to read: "next is a pointer to a function returning a pointer to a const pointer-to-char" and we're done.