# NULL

< c‎ | types

定义于头文件 `<stddef.h>` |  |
定义于头文件 `<string.h>` |  |
定义于头文件 `<wchar.h>` |  |
定义于头文件 `<time.h>` |  |
定义于头文件 `<locale.h>` |  |
定义于头文件 `<stdio.h>` |  |
定义于头文件 `<stdlib.h>` |  |
#define NULL /*implementation-defined*/ |  |

宏 `NULL` 是实现定义的空指针常量，可为

- 值为 ​0​ 的整数常量表达式
- 转型为 void* 的值为 ​0​ 的整数常量表达式

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

### 可能的实现

    // 兼容 C++ ：
    #define NULL 0
    // 不兼容 C++ ：
    #define NULL (10*2 - 20)
    #define NULL ((void*)0)

### 示例

    #include <stdlib.h>
    #include <stdio.h>
    int main(void)
    {
        // 能设置任何类型指针为 NULL
        int* p = NULL;
        struct S *s = NULL;
        void(*f)(int, double) = NULL;

        // 多数返回指针的函数用空指针指示错误
        char *ptr = malloc(10);
        if (ptr == NULL) printf("Out of memory");
        free(ptr);
    }

### 参阅