NULL

来自cppreference.com
< c‎ | types
在标头 <locale.h> 定义
在标头 <stddef.h> 定义
在标头 <stdio.h> 定义
在标头 <stdlib.h> 定义
在标头 <string.h> 定义
在标头 <time.h> 定义
在标头 <wchar.h> 定义
#define NULL /* 由实现定义 */

NULL 是实现定义的空指针常量,可为

(C23 起)

空指针常量能转换为任何指针类型;转换结果是该类型的空指针值。

注解

POSIX 要求 NULL 被定义为转型为 void* 的值为 0 的整数常量表达式。

可能的实现

// 兼容 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)