C-Bibliotheksmakro -NULL

C-Standardbibliothek - <stddef.h>

Beschreibung

C-BibliotheksmakroNULList der Wert einer Nullzeigerkonstante.

  • NULList ein Makro, das eine Nullzeigerkonstante darstellt. Es ist normalerweise definiert als((void*)0), was einen Nullzeiger darstellt, der auf Speicheradresse 0 zeigt.
  • In C++,NULLkann definiert werden als0oder0L, um mit Ganzzahlen kompatibel zu sein0Vergleichen.

Deklaration

Unten sehen Sie eine compilerabhängige Deklaration des NULL-Makros.

#define NULL ((char *)0)

oder 

#define NULL 0L

oder 

#define NULL 0

Parameter

  • N/V

Rückgabewert

  • N/V

Nutzung

  • NULLEs wird verwendet, um anzugeben, dass ein Zeiger nicht auf ein gültiges Objekt oder eine gültige Adresse zeigt. Wenn beispielsweise die dynamische Speicherzuweisung fehlschlägt, wird es normalerweise zurückgegebenNULL。
  • NULLEs wird auch verwendet, um Zeigervariablen zu initialisieren, wodurch angezeigt wird, dass sie derzeit nicht auf eine gültige Adresse zeigen.

Beispiel

Das folgende Beispiel demonstriert die Verwendung des NULL-Makros.

Beispiel 1

#include <stddef.h>
#include <stdio.h>

int main ()
{
   FILE *fp;

   fp = fopen("file.txt", "r");
   if( fp != NULL )
   {
      printf("Datei file.txt erfolgreich geöffnet\n");
      fclose(fp);
   }

   fp = fopen("nofile.txt", "r");
   if( fp == NULL )
   {
      printf("Datei nofile.txt kann nicht geöffnet werden\n");
   }
   
   return(0);
}

Angenommen, die Dateifile.txtexistiert bereits, abernofile.txtexistiert nicht. Lassen Sie uns das obige Programm kompilieren und ausführen; es wird die folgenden Ergebnisse liefern:

成功打开文件 file.txt
不能打开文件 nofile.txt

dynamische Speicherzuweisung:

Beispiel

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *ptr = (int*)malloc(sizeof(int) * 10);

    if (ptr == NULL) {
        printf("Speicherallokation fehlgeschlagen\n");
        return 1;
    }

    // allokierten Speicher verwenden
    for (int i = 0; i < 10; i++) {
        ptr[i] = i;
    }

    // Zugewiesenen Speicher freigeben
    free(ptr);
    ptr = NULL; // Den Zeiger auf NULL setzen

    return 0;
}

Funktionsparameter:

Beispiel

#include <stdio.h>
#include <string.h>

void printString(const char *str) {
    if (str == NULL) {
        printf("Zeichenkette ist NULL\n");
    } else {
        printf("Zeichenkette: %s\n", str);
    }
}

int main() {
    char *string1 = "Hello, World!";
    char *string2 = NULL;

    printString(string1); // Ausgabe: Zeichenkette: Hello, World!
    printString(string2); // Ausgabe: Zeichenkette ist NULL

    return 0;
}

Hinweise

  • NULLEs ist die Standardmethode zur Darstellung eines Nullzeigers, wodurch die direkte Verwendung von0oder(void*)0, um die Lesbarkeit und Wartbarkeit des Codes zu verbessern.
  • Beim Vergleichen von Zeigern sollten Sie verwendenNULL, anstatt direkt zu verwenden0。
  • In C++ können Sienullptrstattdessen zu verwendenNULL, um eine stärkere Typprüfung zu ermöglichen.

Verwandte Informationen

  • Im C++11-Standard wurde dasnullptrSchlüsselwort, als eine typsicherere Nullzeigerkonstante.
  • NULLDie Definition des NULL-Makros kann je nach Compiler- und Standardbibliotheksimplementierung leicht variieren, aber seine Bedeutung und sein Zweck bleiben gleich.

C-Standardbibliothek - <stddef.h>

Weitere Erweiterungen