Namespaces
Variants

NULL

From cppreference.net
< c ‎ | types
Definido en el encabezado <locale.h>
Definido en el encabezado <stddef.h>
Definido en el encabezado <stdio.h>
Definido en el encabezado <stdlib.h>
Definido en el encabezado <string.h>
Definido en el encabezado <time.h>
Definido en el encabezado <wchar.h>
#define NULL /*implementation-defined*/

La macro NULL es una constante de puntero nulo definida por la implementación, que puede ser

(desde C23)

Una constante de puntero nulo puede ser convertida a cualquier tipo de puntero; dicha conversión resulta en el valor de puntero nulo de ese tipo.

Contenidos

Notas

POSIX requiere NULL que sea definido como una expresión constante entera con el valor 0 convertido a void * .

Implementación posible

// Compatible con C++:
#define NULL 0
// Incompatible con C++:
#define NULL (10*2 - 20)
#define NULL ((void*)0)
// desde C23 (compatible con C++11 y posteriores)
#define NULL nullptr

Ejemplo

#include <inttypes.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    // cualquier tipo de puntero puede establecerse en 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);
    // muchas funciones que devuelven punteros utilizan punteros nulos para indicar error
    char *ptr = malloc(0xFULL);
    if (ptr == NULL)
        printf("Memoria insuficiente");
    else
        printf("ptr = %#" PRIxPTR"\n", (uintptr_t)ptr);
    free(ptr);
}

Salida posible:

(nil) (nil) (nil)
ptr = 0xc001cafe

Véase también

el tipo de la constante de puntero nulo predefinida nullptr
(typedef)