Hallo pl,
PS, ich hab mal gelernt, daß der NULL Pointer ja gar kein Pointer ist
Das ist richtig, es ist ein Wert. Ein Wert, den ein Pointer annehmen kann bzw der einem Pointer zugewiesen werden kann.
weil er auf keine Speicheradresse zeigt.
Das ist nur halb richtig. Speicheradresse Null existiert, allerdings wird sie vom OS reserviert und geschützt. Das ist übrigens auch nicht immer so gewesen.
Vielmehr ist der NULL Pointer nur eine Konvention/Vereinbarung/Festlegung und deswegen auch kein numerischer Datentyp wie alle anderen Pointer die auf reelle Speicheradressen zeigen und bspw. vom Typ Int32 sein müssen wenn ein 32~Bit~OS darunterliegt.
Das ist, mit Verlaub, großer Bullshit. Wenn ich einem Pointer den Wert NULL
zuweise: char *ptr = NULL
, dann wird der Speicher, den ptr
belegen muss um eine Speicheradresse speichern zu können, nicht magisch freigegeben. ptr
belegt immer sizeof(char *)
Byte, was idR halt der Architektur-Breite entspricht. Auf 32-Bit-Systemen also 4 byte, auf 64-Bit-Systemen also 8 Byte. Die Größe einer Variablen, die sie im Speicher belegt, ändert sich nicht abhängig vom Wert.
LG,
CK