The address operator (&) is a unary operator that obtains the memory address of its operand. For example, assuming the declarations
int y = 5; // declare variable y
int *yPtr = nullptr; // declare pointer variable yPtr
the statement
yPtr = &y; // assign address of y to yPtr
assigns the address of the variable y
to pointer variable yPtr
. Then variable yPtr
is said to “point to” y
. Now, yPtr
indirectly references variable y
’s value. The use of the &
in the preceding statement is not the same as the use of the &
in a reference variable declaration, which is always preceded by a data-type name. When declaring a reference, the &
is part of the type. In an expression like &y
, the &
is the address operator.
Figure 8.2 shows a representation of memory after the preceding assignment. The “pointing relationship” is indicated by drawing an arrow from the box that represents the pointer yPtr
in memory to the box that represents the variable y
in memory.
Figure 8.3 shows another pointer representation in memory with integer variable y
stored at memory location 600000
and pointer variable yPtr
stored at location 500000
. The operand of the address operator must be an lvalue—the address operator cannot be applied to constants or to expressions that result in temporary values (like the results of calculations).