In C ist NULL eine symbolische Konstante, die immer auf einen nicht existierenden Punkt im Speicher zeigt. Obwohl viele Programmierer es gleich 0 behandeln, ist dies eine Vereinfachung, die Sie später zum Stolpern bringen kann. Am besten überprüfen Sie Ihre Zeiger direkt gegen NULL und verwenden Sie 0 in anderen Kontexten. Dadurch bleibt Ihr Code sauber und leicht verständlich, da Sie jedes Mal wissen, dass Sie mit Zeigern arbeiten, wenn Sie NULL sehen.
Schritte
Teil 1 von 2: Durchführen einer Nullprüfung
Schritt 1. Verwenden Sie den standardmäßigen Nullprüfcode
Das Folgende ist die naheliegendste Methode, um eine Nullprüfung zu schreiben. Wir verwenden ptr in diesem Artikel als Name des Zeigers, den Sie überprüfen.
-
if(ptr == NULL)
{
// Code wenn Zeiger NULL ist
} anders {
// Code wenn nicht NULL
}
Schritt 2. Testen Sie auf einen beliebigen Wert außer NULL
Manchmal ist es bequemer, stattdessen auf Ungleichheit zu testen. Keine Überraschungen hier:
-
if (ptr != NULL) {
// Code wenn nicht NULL
}
Schritt 3. Schreiben Sie zuerst die NULL, um Fehler zu vermeiden (optional)
Der Hauptnachteil der Methode PTR == NULL besteht darin, dass Sie stattdessen versehentlich ptr = NULL eingeben und diesem Zeiger den NULL-Wert zuweisen. Dies kann starke Kopfschmerzen verursachen. Da das Testen auf (Un-)Gleichheit die Operanden symmetrisch behandelt, können Sie genau das gleiche Ergebnis erhalten, indem Sie schreiben if (NULL == ptr) stattdessen. Dies ist typosicherer, da ein versehentliches NULL = ptr einen einfachen Kompilierungsfehler erzeugt.
Das sieht für manche Programmierer etwas umständlich aus, ist aber absolut gültig. Welchen Ansatz Sie verwenden, hängt nur von Ihren persönlichen Vorlieben ab und wie gut Ihr Compiler den Fehler if (ptr = NULL) erkennt
Schritt 4. Testen Sie, ob die Variable wahr ist
Eine einfache wenn (ptr) testet, ob ptr WAHR ist. Es wird FALSE zurückgegeben, wenn ptr NULL ist oder wenn ptr 0 ist. Die Unterscheidung spielt in vielen Fällen keine Rolle, aber beachten Sie, dass diese nicht in allen Architekturen identisch sind.
Das Gegenteil davon ist wenn (!ptr), die TRUE zurückgibt, wenn ptr FALSE ist.
Teil 2 von 2: Fehler vermeiden
Schritt 1. Setzen Sie einen Zeiger, bevor Sie auf NULL prüfen
Ein häufiger Fehler besteht darin, anzunehmen, dass ein neu erstellter Zeiger einen NULL-Wert hat. Das ist nicht wahr. Ein nicht zugewiesener Zeiger zeigt immer noch auf eine Speicheradresse, nur nicht auf eine, die Sie angegeben haben. Es ist gängige Praxis, neu erstellte oder neu freigegebene Zeiger auf NULL zu setzen, um sicherzustellen, dass Sie diese nicht hilfreiche Adresse nicht versehentlich verwenden.
-
Vermeiden Sie diesen Fehler:
Zeichen *ptr;
if(ptr == NULL)
{
//Dies wird FALSE zurückgeben. Dem Zeiger wurde ein gültiger Wert zugewiesen.
}
-
Schreiben Sie stattdessen:
char *ptr = NULL; //Dies weist den Zeiger auf NULL zu
if(ptr == NULL)
{
//Dies gibt TRUE zurück, wenn der Zeiger nicht neu zugewiesen wurde.
}
Schritt 2. Achten Sie auf Funktionen, die NULL zurückgeben könnten
Wenn eine Funktion NULL zurückgeben kann, überlegen Sie, ob dies möglich ist und ob dies später in Ihrem Code zu Problemen führen würde. Hier ist ein Beispiel für die malloc-Funktion mit der Nullprüfung (wenn (ptr)), um sicherzustellen, dass nur Zeiger mit gültigen Werten verarbeitet werden:
-
int *ptr = malloc(N * sizeof(int));
wenn (ptr) {
int ich;
für (i = 0; i < N; ++i)
ptr = i;
}
Schritt 3. Verstehen Sie, dass NULL 0 ist, aber Sie sollten aus Gründen der Übersichtlichkeit immer NULL anstelle von 0 verwenden, wenn Sie mit Zeigern arbeiten
Historisch gesehen hat C NULL als die Zahl 0 (dh 0x00) dargestellt. Heutzutage kann es etwas komplizierter werden und variiert je nach Betriebssystem. Sie können normalerweise mit. nach NULL suchen ptr == 0, aber es gibt Fälle, in denen dies zu Problemen führen kann. Noch wichtiger ist vielleicht, dass die Verwendung von NULL deutlich macht, dass Sie mit Zeigern für andere Personen arbeiten, die Ihren Code lesen.