?
pNode ist eine Adresse. *pNode ist die Dereferenzierung der Adresse, liest also den Wert an der Adresse aus.
pNode kann z.B. auf irgendeine Adresse zeigen. Auch NULL (0) ist eine Adresse, die aber als "nicht genutzt" verwendet wird. D.h., dass wenn ein Pointer die Wert 0 / NULL hat, dass der Pointer auf "nichts" zeigt.
Daher ist es wichtig, einen Pointer immer auf NULL zu setzen, nachdem den Speicher, auf den er gezeigt hat, wieder freigegeben hat.
Ansonsten kommt es beim Dereferenzieren zu undefiniertem Verhalten:
// Irgendwo
pNode = new Node;
// ... später irgendwo
if (irgendwas_tritt_ein())
{
delete pNode;
pNode = NULL;
}
// ... noch später
if (pNode) // pNode zeigt auf NULL, d.h. der Block wird NICHT ausgeführt (pNode == NULL == 0 == false)
{
pNode->DoIt(NOW); // Wäre pNode bereits gelöscht worden, aber NICHT auf NULL gesertzt worden, gäb's hier ein Problem.
}
if (!pNode) // Tue das nur, wenn pNode == NULL ist
// foo
PS.: Nach Bjarne Stroustrup ist die Verwendung von NULL angeblich unschön.