NULL
Определено в заголовочном файле <locale.h> | ||
|---|---|---|
Определено в заголовочном файле <stddef.h> | ||
Определено в заголовочном файле <stdio.h> | ||
Определено в заголовочном файле <stdlib.h> | ||
Определено в заголовочном файле <string.h> | ||
Определено в заголовочном файле <time.h> | ||
Определено в заголовочном файле <wchar.h> | ||
#define NULL /*implementation-defined*/ |
Макрос NULL — это определяемая реализацией константа нулевого указателя, которой может быть
- целочисленное константное выражение со значением
0 - целочисленное константное выражение со значением
0, приведённое к типуvoid*
| (начиная с C23) |
Константа нулевого указателя может быть преобразована в указатель любого типа; результатом такого преобразования является значение нулевого указателя этого типа.
Примечания
POSIX требует, чтобы NULL было определено как целочисленное константное выражение со значением 0, приведённым к void*.
Возможная реализация
// 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 |
Пример
#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);
}
Возможный вывод:
(nil) (nil) (nil) ptr = 0xc001cafe
См. также
|
(C23) | тип предопределённой константы нулевого указателя nullptr (typedef) |
Документация по C++ для NULL |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/types/NULL