需要使用BOOL *而不是BOOL

时间:2015-04-24 19:00:56

标签: objective-c c xcode pointers boolean

我正在使用Objective-C制作国际象棋游戏。在这个游戏中,我需要使用BOOL而不是BOOL *isWhiteTurn; isWhiteTurn = YES; ,因为我需要一个指向布尔变量的指针。当我尝试使用BOOL *时,它会在我尝试执行此操作时发出警告:

{{1}}

警告是:

  

不兼容的整数到指针转换分配给'BOOL *'(又名   来自'BOOL'(又名'signed char')的'signed char *')

2 个答案:

答案 0 :(得分:5)

指针正是听起来像,它指向到其他内存。

让我们举一个简单的例子:

BOOL actualVariable = FALSE;
BOOL *pointerVariable = &actualVariable;

这使pointerVariable指向actualVariable。使用derefernece运算符(一元*),您可以获得指针指向的值:

printf("Value of *pointerVariable = %d\n", *pointerVariable);

那应该打印

Value of *pointerVariable = 0

更多图形化,您可以这样看待它:

+-----------------+       +----------------+
| pointerVariable | ----> | actualVariable |
+-----------------+       +----------------+

您还可以使用取消引用运算符更改指针指向的位置值:

*pointerVariable = TRUE;

如果你声明一个指针,并且不指向任何地方,那么尝试取消引用指针(即获取指针指向的指针)将导致undefined behavior

现在关于你的警告。指针变量实际上是一个简单的整数,其值是它指向的地址。这意味着你理论上可以为它分配任何整数值,程序会认为该值是有效的地址。大多数情况下,它有效。

你得到警告,因为通常使用整数值初始化指针是错误的事情,你应该用另一个指向同一类型的指针初始化指针。

答案 1 :(得分:2)

在评论中显而易见,你有一些功能 采用BOOL *参数,例如

void foo(BOOL *boolPtr) {
    *boolPtr = NO;
}

您需要将BOOL变量的地址传递给 那个功能:

BOOL isWhiteTurn = YES;
foo(&isWhiteTurn);
// Now isWhiteTurn == NO