Frage

Ich bin ein Programmier Schüler besser versuchen, Zeiger zu verstehen, eines der Dinge, die ich gelernt habe, ist, dass Sie einen Zeiger auf NULL setzen. Meine Frage ist, was ist der Unterschied zwischen diesen beiden Aussagen? Wann würde jeder von ihnen zurückkehrt wahr / falsch?

if (some_ptr ==  NULL)

if (*some_ptr == NULL)

Danke!

War es hilfreich?

Lösung

Die erste hat ein Vergleich gegen die Adresse der Variablen auf null, der zweite dereferenziert den Zeiger, um den Wert immer daran gehalten und vergleicht sie gegen null.

Andere Tipps

Die erste Anweisung bezieht sich auf die tatsächliche Adresse der Zeiger some_ptr zu zeigt. Für den Fall, es ist NULL (der Wert durch das definieren NULL dargestellt), es ist wahr, sonst nicht.

Diese Aussage bezieht sich auf den Inhalt an der Adresse der Zeiger auf zeigen. Also, wenn Sie some_ptr Punkt auf eine ganze Zahl haben sollte, und dass ganze Zahl ist nun mal das gleiche sein wie Ihre null definieren, wertet die zweite Bedingung auf true.

Die erste ist, dass Sie den Zeiger selbst gegen NULL vergleichen, was wünschenswert erscheint.

Die zweite ist, dass Sie zunächst den Zeiger sind dereferencing den Wert zu erhalten, die dann gegen NULL verglichen wird, wie Sie einen int-Wert auf 0 basieren Vergleich auf dem Variablennamen.

Der erste sagt:
Ist some_ptr NULL?

Der zweite sagt:
Ist Was some_ptr zeigt auf NULL?

Für zB: int * x; Hier, wenn Sie möchten überprüfen, ob x Punkte auf NULL dann verwenden wir die erste Aussage. Mit den gleichen int * x, wenn Sie die zweite Anweisung verwenden, dann versuchen Sie den Zeiger dereferenzieren und prüfen, ob der Wert, der Punkte x. Da NULL 0 in C, C ++ überprüft es für den Wert 0 die Punkte x.
EDIT:. Auch mit der zweiten Anweisung, wenn x Punkte auf NULL, dann deferencing einen NULL-Zeiger führt zu einem Kerntropfen auf UNIX

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top