Objective-C指针作为布尔值

Geo*_*sen 1 evaluation pointers boolean objective-c

通过一些关于修改CGImageRef数据的文档,我遇到了一个奇怪的例子 - 它有点像这个伪代码:

void *data = Allocate space for data;
if (data != NULL) Manipulate data;
if (data) Free data;
Run Code Online (Sandbox Code Playgroud)

这让我感到疑惑!布尔运算if (data != NULL)和布尔运算有什么区别if (data).

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

Car*_*rum 5

他们完全一样.任何类型的非零值在C中被解释为"真",并且在Objective-C中被解释为"true".C甚至没有布尔类型.

  • 请不要将NULL视为"指向位置0的指针".它只是指向不指向任何东西的指针的约定值.当被强制为布尔值时,它等于false.当你向指针强制零时,你得到NULL. (2认同)
  • 实际上> = C99在[stdbool.h]中定义了布尔类型(http://en.wikipedia.org/wiki/C_data_types) (2认同)