我不确定我对C ++的理解是否错误。我已经读过1)所有非零值都等于TRUE,零等于FALSE; 2)空指针存储为零。
然而这样的代码:
void ViewCell::swapTiles (ViewCell *vc) {
ViewTile *tmp = vc->tile();
[stuff ...]
if (tmp) addTile(tmp);
}
给我一个解除引用空指针的段错误,但是
if (tmp != 0) addTile(tmp);
工作正常。知道为什么吗?
答案 0 :(得分:8)
对于指针,p
和(p != 0)
完全等效。如果它给你一个段错误,那么它不是一个普通的指针,或者问题是在其他地方
答案 1 :(得分:1)
C ++ 0指针不一定存储为全零位模式,但如果编译器认为它是指针,则令牌0总是被解释为0指针,并且整数0总是被强制转换为0指针(可能如果编译器认为它是需要进行类型转换的整数,则为不同的位模式。并且指向不同事物的指针可以具有不同的sizeof,其也可以是与整数不同的sizeof。但你可以看到它是如何运作的。通常。清除?