Namespaces
Variants

NULL

From cppreference.net
< c ‎ | types
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

(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

#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

der Typ der vordefinierten Nullzeigerkonstante nullptr
(typedef)