当前位置:  开发笔记 > IOS > 正文

赋值使得指针在没有强制转换的情况下从整数开始

如何解决《赋值使得指针在没有强制转换的情况下从整数开始》经验,为你挑选了3个好方法。

我有一个类似于此的Obj-C方法:

-(void)getUserDefaults:(BOOL *)refreshDefaults
{
    PostAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

    if (refreshDefaults) {
        [appDelegate retrieveDefaults];
    }
}

当我这样称呼它时,我没有得到任何警告:

[self getUserDefaults:NO];

当我这样打电话时,我收到警告:

[self getUserDefaults:YES];

警告:传递'getUserDefaults:'的参数1使得整数指针没有强制转换

注意:我总是先调用方法传递NO,然后在某个时候传递YES

任何人都可以填写我的问题在这里?谢谢.



1> Chris Hanson..:

BOOL 是一个原始类型,而不是一个类,所以你的方法声明应该是

-(void)getUserDefaults:(BOOL)refreshDefaults;

代替.你得到警告的原因是0(这是NO定义的)是没有强制转换的有效指针值,相当于NULL,但是1(这YES是定义的)不是有效的指针值没有演员.



2> Andrew Medic..:

getUserDefaults采用BOOL*.传递NO时不会收到警告,因为NO为0且0为NULL,这是合法的BOOL*.YES为1,相同的转换不会自动安全.

你应该使getUserDefaults采用普通的BOOL,而不是指针.



3> aib..:

我之前从未见过Obj-C代码,但我很确定这是因为'refreshDefaults'是指向BOOL的指针,而它应该是BOOL.

我不知道Obj-C中的输入规则,但它看起来像NO定义为0并且编译器没有问题将它转换为指针值(NULL指针.)这不是整数的情况' 1.(另请注意"if(refreshDefaults)"是检查指针refreshDefaults对NULL指针的有效代码)

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有