NULL
From cppreference.net
|
Definiert in Header
<locale.h>
|
||
|
Definiert in Header
<stddef.h>
|
||
|
Definiert in Header
<stdio.h>
|
||
|
Definiert in Header
<stdlib.h>
|
||
|
Definiert in Header
<string.h>
|
||
|
Definiert in Header
<time.h>
|
||
|
Definiert in Header
<wchar.h>
|
||
|
#define NULL /*implementation-defined*/
|
||
Das Makro
NULL
ist ein implementierungsdefinierter Nullzeigerkonstantenwert, welcher sein kann
- eine ganzzahlige konstante Expression mit dem Wert 0
- eine ganzzahlige konstante Expression mit dem Wert 0 gecastet zum Typ void *
|
(seit C23) |
Ein Nullzeigerkonstant kann in jeden Zeigertyp konvertiert werden ; eine solche Konvertierung ergibt den Nullzeigerwert dieses Typs.
Inhaltsverzeichnis |
Hinweise
POSIX erfordert
NULL
als einen ganzzahligen konstanten Ausdruck mit dem Wert
0
gecastet zu
void
*
definiert zu werden.
Mögliche Implementierung
// C++ kompatibel: #define NULL 0 // C++ inkompatibel: #define NULL (10*2 - 20) #define NULL ((void*)0) // seit C23 (kompatibel mit C++11 und später) #define NULL nullptr |
Beispiel
Diesen Code ausführen
#include <inttypes.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> int main(void) { // jeder Art von Zeiger kann auf NULL gesetzt werden int* p = NULL; struct S *s = NULL; void(*f)(int, double) = NULL; printf("%p %p %p\n", (void*)p, (void*)s, (void*)(long)f); // viele zeigerliefernde Funktionen verwenden Nullzeiger zur Fehleranzeige char *ptr = malloc(0xFULL); if (ptr == NULL) printf("Speicher erschöpft"); else printf("ptr = %#" PRIxPTR"\n", (uintptr_t)ptr); free(ptr); }
Mögliche Ausgabe:
(nil) (nil) (nil) ptr = 0xc001cafe
Siehe auch
|
(C23)
|
der Typ der vordefinierten Nullzeigerkonstante
nullptr
(typedef) |
|
C++-Dokumentation
für
NULL
|
|