NULL
Von cppreference.com
| Definiert im Header <locale.h> |
||
| Definiert im Header <stddef.h> |
||
| Definiert in Header <stdio.h> |
||
| Definiert im 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 eine implementierungsabhängige Nullzeigerkonstante, die sein kann:
- ein ganzzahliger Konstantausdruck mit dem Wert 0
- ein ganzzahliger Konstantausdruck mit dem Wert 0 in den Typ void*
|
(seit C23) |
Eine Nullzeigerkonstante kann in jeden Zeigertyp konvertiert werden; eine solche Konvertierung ergibt den Nullzeigerwert dieses Typs.
Inhalt |
[bearbeiten] Hinweise
POSIX verlangt, dass NULL als ganzzahliger Konstantausdruck mit dem Wert 0, nach void* konvertiert, definiert wird.
[bearbeiten] Mögliche Implementierung
// C++ compatible: #define NULL 0 // C++ incompatible: #define NULL (10*2 - 20) #define NULL ((void*)0) // since C23 (compatible with C++11 and later) #define NULL nullptr |
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <inttypes.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> int main(void) { // any kind of pointer can be set to NULL int* p = NULL; struct S *s = NULL; void(*f)(int, double) = NULL; printf("%p %p %p\n", (void*)p, (void*)s, (void*)(long)f); // many pointer-returning functions use null pointers to indicate error char *ptr = malloc(0xFULL); if (ptr == NULL) printf("Out of memory"); else printf("ptr = %#" PRIxPTR"\n", (uintptr_t)ptr); free(ptr); }
Mögliche Ausgabe
(nil) (nil) (nil) ptr = 0xc001cafe
[bearbeiten] Siehe auch
| (C23) |
der Typ der vordefinierten Nullzeigerkonstante nullptr (typedef) |
| C++ Dokumentation für NULL
| |