
The null pointer
Thus, C has no genuine character data type but uses char as a mixed type for characters
as well as for small integers and other octets. Moreover, C uses the integer 0, either as
such or as explicitly cast to a pointer type, as a null pointer. The null pointer is a special
pointer value indicating “not a pointer to anything.” Pointer values correspond to ad-
dresses of storage units, and they are at least two octets long, often longer. Their im-
plementation depends on the addressing architecture of the computer. In a simple im-
plementation, pointers could be simply numbers of storage locations, with the address
0 unused so that it can be used for the null pointer. However, implementations vary,
and the null pointer need not be internally represented the same way as the integer 0.
There is also a predefined name (macro) for denoting the null pointer: NULL, which
expands to 0. It is often recommended for use instead of the literal 0, to indicate that a
pointer is involved and not an integer. The C compiler is supposed to treat the integer
0 in a pointer context as a null pointer, no matter how the value 0 has been written in
the source code and no matter what the internal representation of pointers is.
An implementation of C may also define NULL
as (void *) 0. This means
the value zero converted to the generic pointer type void *, which is
compatible with any pointer type.
Confusion ...