2012-04-04 34 views
1

通过一些文件上修改CGImageRef数据去,我遇到了一个奇怪的例子 - 它继续沿着这条伪线的东西:Objective-C的指针作为布尔

void *data = Allocate space for data; 
if (data != NULL) Manipulate data; 
if (data) Free data; 

这让我想知道!布尔操作if (data != NULL)和布尔操作if (data)之间有什么区别。

更具体地说,当它们被视为布尔值时,指针在Objective C中的行为如何?试图谷歌这一点,我只发现有关指针- -booleans,而不是评估指针作为布尔人的无数问题。

回答

5

它们完全一样。任何类型的非零值在C中被解释为“真”,在Objective-C中被解释为“真”。 C甚至没有布尔类型。

+0

哦,并且因为NULL可以被看作是指向位置0的指针,所以它被评估为false ...哎呀,谢谢! :) – 2012-04-04 06:18:29

+2

请不要将NULL看作任何类似“指向位置0的指针”的东西。这只是指向任何东西的指针的商定价值。当被迫成为布尔值时,它等同于假。当你强制一个零指针,你会得到NULL。 – 2012-04-04 06:21:21

+0

@GeorgesOatesLarsen:空指针不一定是指向存储器位置0。根据C时的参数,一个空指针被保证比较不等于任何有效的指针。在某些平台上,内存位置0可能是有效的(例如,它可能是中断处理程序表中的第一个条目)。然而,一个空指针转换为整数值0并从整数值0转换,从而空指针被解释为一个假值。见C99,第6.3.2.3 3. – outis 2012-04-04 06:23:09