In ANSI-C ist es möglich, an beliebige Zeigervariablen eine Zeigerkonstante
vom Typ void *
ohne expliziten cast zuzuweisen.
Dementsprechend ist in ANSI-C die
,,ungültige`` Zeigerkonstante
NULL als (void*)0
definiert (zumindest in
stddef.h).
Eine Zuweisung eines void*
an einen
nicht-void-Zeiger ist in C++ nicht mehr zulässig, dafür aber die
Zuweisung einer ganzzahligen 0 (-Konstante) an jeden Zeiger. Deshalb muß in
C++ NULL einfach als Wert 0 definiert sein. (Die Zuweisung
einer anderen int-Konstante ist dagegen ohne cast nach wie vor
nicht erlaubt; der Wert 0 nimmt hier eine Sonderstellung ein.)
In [Strou IV] ist dafür ein nettes Beispiel zu finden:
char *p = ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !!!!!! !!!!! !!!!1;
Die daraus resultierende Empfehlung mancher Leute, wegen drohender Verwechslungsgefahr gleich auf NULL zu verzichten, und stattdessen 0 oder einen als 0 definierten Wert (NIL oder ähnliches) zu verwenden, halte ich für übertrieben. Wenn man weiß, daß NULL kein void * mehr ist, kann man es recht gefahrlos verwenden. NULL hat sich als ,,ungültiger Zeiger`` durchgesetzt; es gibt m.E. keinen vernünftigen Grund, das zu ändern.
AnyWare@Wachtler.de