NULL
From cppreference.net
|
定义于头文件
<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
参见
|
(C23)
|
预定义空指针常量
nullptr
的类型
(typedef) |
|
C++ documentation
for
NULL
|
|