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 是一个实现定义的空指针常量,它可以

(自 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("Out of memory");
    else
        printf("ptr = %#" PRIxPTR"\n", (uintptr_t)ptr);
    free(ptr);
}

可能的输出:

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

参见

预定义空指针常量 nullptr 的类型
(typedef)