September 25, 2004 11:50 PM
Null as you know means nothing. This whole entry is about nothing. Nothing in C. Heh heh, I've always wanted to say that. Actually, this entry is about null pointers. Thought about them when one of my friends asked if
NULL can be substituted with zero.
A null pointer is a special pointer value that implies not allocated
yet. It is not supposed to point to any function or value or be equal
to a pointer to any object or function. C specifies that a constant
0 in a pointer context is converted internally to a null
0 as an argument to a function might1 not. Then, you
have to typecast
0 to the corresponding pointer data type that the
function is expecting. For example, if the argument required is a
char*, then pass
(char *)0 instead of just
The internal representation of null pointers for different types may be different. The compiler must be able to make the distinction if necessary.
NULL is used to denote zero the null pointer emphasizing
it's difference from an integer zero. Usually,
#defined as zero typecasted to
(void *). Though a
normal zero is perfectly acceptable. The language defines it to be
internally translated anyway.
It's implementation in the GNU C library clarifies things further.
Old MS DOS compilers2 issue a null pointer assignment error when you try to assign a value via a null pointer, that is, when you try to assign something to nothing.