[
Note 1: 
A pointer to 
void
does not have a pointer-to-object type, however, because 
void is not
an object type
. — 
end note]
A pointer to an object of type 
T is referred to as a “pointer to
T”
.[
Example 1: 
A pointer to an object of type 
int is
referred to as “pointer to 
int” and a pointer to an object of
class 
X is called a “pointer to 
X”
. — 
end example]
Except for pointers to static members, text referring to “pointers”
does not apply to pointers to members
.Pointers to incomplete types are
allowed although there are restrictions on what can be done with
them (
[basic.types.general])
.Every value of pointer type is one of the following:
A value of a
pointer type
that is a pointer to or past the end of an object
represents the address of
the first byte in memory (
[intro.memory]) occupied by the object
or the first byte in memory
after the end of the storage occupied by the object,
respectively
.[
Note 2: 
A pointer past the end of an object (
[expr.add])
is not considered to point to an unrelated object
of the object's type,
even if the unrelated object is located at that address
. — 
end note]
For purposes of pointer arithmetic (
[expr.add])
and comparison (
[expr.rel], 
[expr.eq]),
a pointer past the end of the last element of
an array 
x of 
n elements
is considered to be equivalent to
a pointer to a hypothetical array element 
n of 
x, and
an object of type 
T that is not an array element
is considered to belong to an array with one element of type 
T.The value representation of
pointer types is 
implementation-defined
.Pointers to
layout-compatible types shall
have the same value representation and alignment
requirements (
[basic.align])
.[
Note 3: 
Pointers to 
over-aligned types have no special
representation, but their range of valid values is restricted by the extended
alignment requirement
. — 
end note]