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,而不是评估指针作为布尔人的无数问题。
哦,并且因为NULL可以被看作是指向位置0的指针,所以它被评估为false ...哎呀,谢谢! :) – 2012-04-04 06:18:29
请不要将NULL看作任何类似“指向位置0的指针”的东西。这只是指向任何东西的指针的商定价值。当被迫成为布尔值时,它等同于假。当你强制一个零指针,你会得到NULL。 – 2012-04-04 06:21:21
@GeorgesOatesLarsen:空指针不一定是指向存储器位置0。根据C时的参数,一个空指针被保证比较不等于任何有效的指针。在某些平台上,内存位置0可能是有效的(例如,它可能是中断处理程序表中的第一个条目)。然而,一个空指针转换为整数值0并从整数值0转换,从而空指针被解释为一个假值。见C99,第6.3.2.3 3. – outis 2012-04-04 06:23:09