Moin,
* David Haller
On Mon, 09 Dec 2002, Thorsten Haude wrote:
* Sebastian Huber
[02-12-09 20:16]: Thorsten Haude
schrieb am 09.12.02 18:55:38: ich versuche gerade, etwas Code zu verschönern, dabei stellt sich mir folgende Frage: Was ist der Unterschied zwischen (einTyp*) 0
Hier hast du eine explizite Typkonvertierung (Cast) von einem Integerliteral zu einem einTyp-Zeiger.
Das verstehe ich.
Ist aber nur bedingt richtig. Wie ich neulich gelesen habe, ist NULL (auch und gerade(!) wenn es als (void*)0 definiert ist) nicht unbedingt ein Zeiger auf die Speicheradresse 0.
Was genau ist jetzt nur bedingt richtig?
NULL
Hier hast du eine implizite Typkonvertierung von einem void-Zeiger (bei neuern Standard- bibliotheken) mit dem Wert 0 zu einem einTyp-Zeiger. Ich würde diese Version wählen, bei C++ ist eigentlich die blose '0' üblich.
s.o. casts von 0 auf Zeiger bzw. Vergleiche von Zeigern mit 0 (oder indirekt ueber ein NULL, z.B. eben (void*)0) haben obiges Verhalten zu zeigen -- egal auf was nun der Zeiger zeigt / mit was verglichen wird.
Jepp, jetzt ist es klar geworden. Ihr habt Sachen vorrausgesetzt, über die wir noch garnicht gesprochen hatten, aber inzwischen bin ich dahintergekommen.
Das nicht. Wo wird hier konvertiert, außer von 0 zu (void*) 0 ?
s.o. "per definitionem" muss es egal sein.
Hier hast Du mich wieder verloren. Du schreibst doch die ganze Zeit, daß Zeiger und Integer nicht gleich sind!?
Der Vergleich ptr == NULL ist IMO vorzuziehen, sofern die Implementation ein NULL bietet.
NULL ist ANSI-C. Thorsten -- I believe that there are more instances of the abridgment of the freedom of the people by gradual and silent encroachment than by violent and sudden usurpations. - James Madison