'将地址带上&'这意味着什么?

时间:2012-07-04 15:42:43

标签: iphone objective-c ios

名为getTimerInterval的函数返回了一个NSTimerInterval值

-(NSTimeInterval *)getInterval {
    NSTimeInterval interval = 1;
    return interval;
}

Xcode警告我

  

从函数中返回'NSTimeInterval'(又名'double')   不兼容的结果类型'NSTimeInterval *'(又名'double *');拿走   地址与&“在线”返回间隔“

好吧,NSInteger类型很好:

-(NSIntefer)getInteger {
    NSIntefer result = 1;
    return result;
}

以及直接返回号码:

 -(NSTimeInterval *)getInterval {
     return 1;
 }

好的,在调用getInterval函数后发出警告:

[NSTimer scheduledTimerWithTimeInterval:[self getInterval] target:self selector:@selector(timerFired:) userInfo:nil repeats:YES];
  

将'NSTimeInterval *'(又名'double *')发送给参数   不兼容的类型'NSTimeInterval'(又名'double');用*

取消引用

我对&和*,我应该在哪里使用&要么 *? 这究竟是什么意思?
我只知道它是关于指针或其他东西的c ++语法,谢谢高级。

3 个答案:

答案 0 :(得分:2)

为了修复编译器警告,您需要返回它的地址,如下所示:

-(NSTimeInterval *)getInterval {
    NSTimeInterval interval = 1;
    return &interval;
}

然而这很糟糕,因为您将返回方法堆栈帧上的地址,该地址在返回后会消失。为什么不这样回来:

-(NSTimeInterval)getInterval {
    NSTimeInterval interval = 1;
    return interval;
}

我认为这也将修复您的其他编译器错误。

答案 1 :(得分:0)

它是基本的C(因此是objective-c)语法,意思是“变量地址”(&),反之“地址值”(*)。该地址称为指针。有数百个网站非常详细地解释了这一点。

一个简单的例子:

NSInteger i=1;
NSInteger *ptr;

ptr = &i;

NSLog(@"The pointer %p points to value %d (which is equal to %d)",ptr,*ptr,i);

答案 2 :(得分:0)

Objective-C中的指针是内存的文字位,所以当你使用指针(*)传递一个值时,它的内存地址就会出现。另一方面,&符号字面意思是“地址”,通常用于原始数据类型变量,如int,BOOL,double等,在我们希望方法修改变量本身的情况下(通常它指向的是什么) (以及)并返回一个可用的值。 NSError相当一致地遵循这个逻辑。