C ++零(null)指针是否应该返回false?

时间:2009-08-08 07:29:09

标签: c++ pointers

我不确定我对C ++的理解是否错误。我已经读过1)所有非零值都等于TRUE,零等于FALSE; 2)空指针存储为零。

然而这样的代码:

void ViewCell::swapTiles (ViewCell *vc) {
    ViewTile *tmp = vc->tile();
    [stuff ...]
    if (tmp) addTile(tmp);
}

给我一​​个解除引用空指针的段错误,但是

if (tmp != 0) addTile(tmp);

工作正常。知道为什么吗?

2 个答案:

答案 0 :(得分:8)

对于指针,p(p != 0)完全等效。如果它给你一个段错误,那么它不是一个普通的指针,或者问题是在其他地方

答案 1 :(得分:1)

C ++ 0指针不一定存储为全零位模式,但如果编译器认为它是指针,则令牌0总是被解释为0指针,并且整数0总是被强制转换为0指针(可能如果编译器认为它是需要进行类型转换的整数,则为不同的位模式。并且指向不同事物的指针可以具有不同的sizeof,其也可以是与整数不同的sizeof。但你可以看到它是如何运作的。通常。清除?