【问题标题】:null pointer equivalence to int空指针等价于 int
【发布时间】:2025-12-15 15:25:03
【问题描述】:

在“The C++ Programming Language”中,Bjarne 写道,空指针与整数零不同,而是可以将 0 用作空指针的指针初始值设定项。这是否意味着:

void * voidPointer = 0;
int zero = 0;
int castPointer = reinterpret_cast<int>(voidPointer);
assert(zero == castPointer) // this isn't necessarily  true

【问题讨论】:

    标签: c++ null pointers


    【解决方案1】:

    是的,这意味着castPointer 不一定为零,并且断言可能会失败。因为虽然 空指针常量 为零,但某种类型的 空指针 不一定是所有位为零的地址。

    reinterpret_cast 在将空指针转换为 int 时没有产生零的特殊规定。您可以通过使用布尔运算符来实现这一点,它将使用01 初始化变量:

    int castPointer = (voidPointer != 0);
    

    【讨论】:

    • 我想知道是否有人能指出一个 NULL 指针的实现不是一堆零位的系统。只是好奇那里有没有。
    • 有。虽然我不能说出任何名字,但我以前遇到过他们,在这样的讨论中。 :)