Matthew H. answered 04/08/19
Professional C/C++ Developer Specializing in AVR/ARM Embedded Platform
Hi, can you mention the name of the book? Is it perhaps a C++ book? In C++ the situation is different but for C, strictly, I would simply go by what the ISO/IEC C standard currently states, section 6.5.3.2, paragraph 3, first sentence:
The unary & operator yields the address of its operand.
It's clear enough for me. The full paragraph has a few special cases and reads:
The unary & operator yields the address of its operand. If the operand has type ‘‘type’’, the result has type ‘‘pointer to type’’. If the operand is the result of a unary * operator, neither that operator nor the & operator is evaluated and the result is as if both were omitted, except that the constraints on the operators still apply and the result is not an lvalue. Similarly, if the operand is the result of a [] operator, neither the & operator nor the unary * that is implied by the [] is evaluated and the result is as if the & operator were removed and the [] operator were changed to a + operator. Otherwise, the result is a pointer to the object or function designated by its operand.
Given what the standard says any further commentary or speculation on what operator & "really" means would seem to be splitting hairs in the case of C, strictly, and I could only guess at the author's motivation in that case. They state "usually leads to grief" but seem to give no examples of what situations they mean specifically.