我正在使用Objective-C制作国际象棋游戏。在这个游戏中,我需要使用BOOL
而不是BOOL *isWhiteTurn;
isWhiteTurn = YES;
,因为我需要一个指向布尔变量的指针。当我尝试使用BOOL *时,它会在我尝试执行此操作时发出警告:
{{1}}
警告是:
不兼容的整数到指针转换分配给'BOOL *'(又名 来自'BOOL'(又名'signed char')的'signed char *')
答案 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