Pointers and Const-Correctness
Pointers have two modes of const-ness: pointers that do not allow
modifications to the data, and pointers that must always point to
the same address. The two may be combined. For the full story on
const-correctness, see
const
correctness--why bother?
Pointer to Constant Data
A pointer to const data does not allow modification of the data
through the pointer. The declaration of const data merely
requires that the const precede the *, so either of the following
two declarations are valid.
const type* variable;
or
type const * variable;
The memory address stored in a pointer to constant data cannot be assigned
into regular pointers (that is, pointers to non-const data) without a
const
cast.
Pointers with Const Memory Address
Pointers with a constant memory address are declared by including the const
after the *. Because the address is const, the pointer must be assigned
a value immediately.
type * const variable = some memory address;
Const Data with a Const Pointer
To combine the two modes of const-ness with pointers, you can simply include
const for both data and pointer by putting const both before and after the *:
const type * const variable = some memory address;
or
type const * const variable = some memory address;