Passing an object’s address
A call such as double_swap(&d0, &d1) passes the addresses of d0 and d1. The pointer parameters p0 and p1 then identify those objects, so *p0 and *p1 access and modify their contents. section 11.1.1
double_swap(&d0, &d1);
Inspect the compact call that applies the address-of operator to both swap operands. section 11.1.1
The unary address-of operator & produces a pointer type. Its operand designates an object whose address can be passed elsewhere; the receiving function need not know the object’s original variable name. The unary * operator reverses this access by dereferencing the pointer. In a declaration, * creates pointer type syntax; in an expression, it accesses the pointed-to object. section 11.1.1
TAKEAWAY rules:
- Use & to pass an object’s address to a pointer parameter. section 11.1.1
- Do not dereference a null or invalid pointer; execution using * with either fails. section 11.1.1
- Recognize that equal addresses can create aliasing, allowing one pointer-based assignment to change the object accessed through another pointer. section 12.3

