Namespaces
Variants

NULL

From cppreference.net
< c ‎ | types
Определено в заголовочном файле <locale.h>
Определено в заголовочном файле <stddef.h>
Определено в заголовочном файле <stdio.h>
Определено в заголовочном файле <stdlib.h>
Определено в заголовочном файле <string.h>
Определено в заголовочном файле <time.h>
Определено в заголовочном файле <wchar.h>
#define NULL /*implementation-defined*/

Макрос NULL является определяемой реализацией константой нулевого указателя, которая может быть

  • предопределенная константа nullptr
(начиная с C23)

Нулевой указатель-константа может быть преобразован в любой указательный тип; такое преобразование даёт нулевое значение указателя этого типа.

Содержание

Примечания

POSIX требует NULL быть определённым как целочисленное константное выражение со значением 0 приведённым к типу void * .

Возможная реализация

// Совместимо с C++:
#define NULL 0
// Несовместимо с C++:
#define NULL (10*2 - 20)
#define NULL ((void*)0)
// начиная с C23 (совместимо с C++11 и позднее)
#define NULL nullptr

Пример

#include <inttypes.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    // любой тип указателя может быть установлен в 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);
    // многие функции, возвращающие указатели, используют нулевые указатели для обозначения ошибки
    char *ptr = malloc(0xFULL);
    if (ptr == NULL)
        printf("Недостаточно памяти");
    else
        printf("ptr = %#" PRIxPTR"\n", (uintptr_t)ptr);
    free(ptr);
}

Возможный вывод:

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

Смотрите также

тип предопределённой константы нулевого указателя nullptr
(typedef)