The language definition states that for each pointer type, there is a special value--the
``null pointer''--which is distinguishable from all other pointer values
and which is ``guaranteed to compare unequal to a pointer to any object or function.''
That is, a null pointer points definitively nowhere; it is not the address of any
object or function. The address-of operator & will never yield a null pointer, nor
will a successful call to malloc.(malloc does return a null pointer when it fails,
and this is a typical use of null pointers: as a ``special'' pointer value
with some other meaning, usually ``not allocated'' or ``not pointing anywhere
yet.'')A null pointer is conceptually different from an uninitialized
pointer. A null pointer is known not to point to any object or function; an uninitialized
pointer might point anywhere. As mentioned above, there is a null pointer for each
pointer type, and the internal values of null pointers for different types may be
different. Although programmers need not know the internal values, the compiler
must always be informed which type of null pointer is required, so that it can make
the distinction if necessary.