# Predefined null pointer constant (since C23)

From cppreference.com
< c‎ | language

### Syntax

`nullptr` |  | (since C23)

### Explanation

The keyword `nullptr` denotes a predefined null pointer constant. It is a non-lvalue of type nullptr_t. `nullptr` can be converted to a pointer types or bool, where the result is the null pointer value of that type or false respectively.

### Keywords

`nullptr`

### Example

Demonstrates that a copy of `nullptr` can also be used as a null pointer constant.

Run this code

    #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);         // Fine
        g(NULL);            // Fine
        g(0);               // Fine

        puts("-----------------");

        auto cloned_nullptr = nullptr;
        auto cloned_NULL    = NULL;
        auto cloned_zero    = 0;
        g(cloned_nullptr);  // Fine
    //  g(cloned_NULL);     // ERROR
    //  g(cloned_zero);     // ERROR

        puts("-----------------");

        DETECT_NULL_POINTER_CONSTANT(((void*)0));
        DETECT_NULL_POINTER_CONSTANT(0);
        DETECT_NULL_POINTER_CONSTANT(nullptr);
        DETECT_NULL_POINTER_CONSTANT(NULL); // implementation-defined
    }

Possible output:

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

### References

- C23 standard (ISO/IEC 9899:2023):

### See also

NULL | implementation-defined null pointer constant (macro constant)
nullptr_t (C23) | the type of the predefined null pointer constant `nullptr` (typedef)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=c/language/nullptr&oldid=154089"