预定义空指针常量 (C23 起)

来自cppreference.com
< c‎ | language

语法

nullptr (C23 起)

解释

关键词 nullptr 代表预定义的空指针常量。它是 nullptr_t 类型的非左值nullptr转换到指针类型或 bool ,结果分别为该类型的空指针值或 false

示例

演示 nullptr 的副本亦能用作空指针常量。

#include <stddef.h>
#include <stdio.h>
 
void g(int*)
{
    puts("Function g called");
}
 
#define DETECT_NULL_POINTER_CONSTANT(e) \
    _Generic(e,                         \
        void* : puts("void*"),          \
        nullptr_t : puts("nullptr_t"),  \
        default : puts("integer")       \
    )
 
int main()
{
    g(nullptr);        // 好
    g(NULL);           // 好
    g(0);              // 好
 
    puts("----------------");
 
    auto cloned_nullptr = nullptr;
    auto cloned_NULL   = NULL;
    auto cloned_zero   = 0;
    g(cloned_nullptr); // 好
//  g(cloned_NULL);    // 错误
//  g(cloned_zero);    // 错误
 
    puts("----------------");
 
    DETECT_NULL_POINTER_CONSTANT(((void*)0));
    DETECT_NULL_POINTER_CONSTANT(0);
    DETECT_NULL_POINTER_CONSTANT(nullptr);
    DETECT_NULL_POINTER_CONSTANT(NULL); // 实现定义
}

可能的输出:

Function g called
Function g called
Function g called
----------------
Function g called
----------------
void*
integer
nullptr_t
void*

关键词

nullptr

参阅

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