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);
}
#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;
}
#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;
}
#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 verwenden
NULL, anstatt direkt zu verwenden0。 - In C++ können Sie
nullptrstattdessen zu verwendenNULL, um eine stärkere Typprüfung zu ermöglichen.
Verwandte Informationen
- Im C++11-Standard wurde das
nullptrSchlü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.