Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 需要使用BOOL*而不是BOOL_Objective C_C_Xcode_Pointers_Boolean - Fatal编程技术网

Objective c 需要使用BOOL*而不是BOOL

Objective c 需要使用BOOL*而不是BOOL,objective-c,c,xcode,pointers,boolean,Objective C,C,Xcode,Pointers,Boolean,我正在用Objective-C下棋。在这个游戏中,我需要使用BOOL*而不是BOOL,因为我需要一个指向布尔变量的指针。当我尝试使用BOOL*时,当我尝试这样做时,它会给我一个警告: BOOL *isWhiteTurn; isWhiteTurn = YES; 警告是: 分配给“BOOL*”的整数到指针转换不兼容(aka “signed char*”)来自“BOOL”(也称为“signed char”) 指针就是它听起来的样子,它指向其他的内存 让我们举一个简单的例子: BOOL actualV

我正在用Objective-C下棋。在这个游戏中,我需要使用
BOOL*
而不是
BOOL
,因为我需要一个指向布尔变量的指针。当我尝试使用BOOL*时,当我尝试这样做时,它会给我一个警告:

BOOL *isWhiteTurn;
isWhiteTurn = YES;
警告是:

分配给“BOOL*”的整数到指针转换不兼容(aka “signed char*”)来自“BOOL”(也称为“signed char”)


指针就是它听起来的样子,它指向其他的内存

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

BOOL actualVariable = FALSE;
BOOL *pointerVariable = &actualVariable;
这使得
pointerVariable
指向
actualVariable
。使用derefernece运算符(一元
*
)可以获得指针指向的值:

printf("Value of *pointerVariable = %d\n", *pointerVariable);
应该打印出来

Value of *pointerVariable = 0 如果您声明了一个指针,但没有使它指向任何地方,那么尝试取消引用该指针(即获取指针指向的内容)将导致错误


关于你的警告。指针变量实际上是一个简单的整数,其值是它指向的地址。这意味着理论上你可以给它赋值,程序会认为这个值是一个有效的地址。但大多数情况下,这并不是什么有效的东西


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

在注释中很明显,您有一些功能 以
BOOL*
参数为例

void foo(BOOL *boolPtr) {
    *boolPtr = NO;
}
您需要将
BOOL
变量的地址传递给 该职能:

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

你为什么需要一个指针?更多的上下文可能会有所帮助。请仔细检查您是否需要
BOOL*
或“盒装”BOOL
[NSNumber numberWithBool:YES]
除非您知道指针是什么,否则不应使用它们!!这里的反对票似乎太多了。OP可能需要也可能不需要BOOL*,并且在任何情况下都需要语法帮助。它可能是一个dup,但引用的dup太笼统了,依我看(或者它是关于c指针的所有问题的dup)。“你会得到警告,因为通常使用整数值初始化指针是错误的,你应该用另一个指向相同类型的指针初始化指针。”,我不确定你的意思。如何将BOOL指针初始化为YES?我的意思是在代码中。@AdnanZahid看到了第一行代码。您需要使指针实际指向某个地方,然后可以修改它指向的位置的值。不能直接使用指针设置值,需要间接设置。好的,我做了“BOOL temp=YES;BOOL*isWhiteTurn=&temp;”。现在当我试着做isWhiteTurn=!白化;我从'int'@AdnanZahid收到一条警告:“分配给'BOOL*'(也称为'signed char*')的不兼容整数到指针转换。我认为一个更合适的回答实际上是:为什么要为此使用指针?@AdnanZahid再次阅读我的答案,它告诉您如何取消对指针的引用。
void foo(BOOL *boolPtr) {
    *boolPtr = NO;
}
BOOL isWhiteTurn = YES;
foo(&isWhiteTurn);
// Now isWhiteTurn == NO