【问题标题】:What mean * and & [closed]什么意思 * 和 & [关闭]
【发布时间】:2013-02-06 12:24:22
【问题描述】:

今天我阅读了 Carlo Chung 的“iOS 的 Pro Objective-C 设计模式”。 所以我阅读了适配器模式并看到了在协议中声明的这个方法:

-(void) command: (SetStrokeColorCommand *) command
        didRequestColorComponentsForRed: (CGFloat *) red
                                  green: (CGFloat *) green
                                   blue: (CGFloat *) blue;

您可以在本书的第 115 页看到它。 比用这个方法

[delegate_ command:self didRequestColorComponentsForRed: &redValue
                                                  green: &greenValue
                                                   blue: &blueValue];

然后在第 118 页声明此方法

-(void) command: (SetStrokeColorCommand *) command
        didRequestColorComponentsForRed: (CGFloat *) red
                                  green: (CGFloat *) green
                                   blue: (CGFloat *) blue
 {
  *red = [redSlider_ value];
  *green = [greenSlider_ value];
  *blue = [blueSlider_ value];
 }

声明中的 * 是什么意思 (*red, *green, *blue) 和 & (&redValue...) 是什么意思?我看到 & 代码中只有 &error 。

【问题讨论】:

  • 阅读一些关于 C 或 C++ 指针的资料。
  • & 是地址运算符,* 将变量声明为指针,或取消引用已声明的 cplusplus.com/doc/tutorial/pointers
  • 唯一有效的答案是从一本书开始。我建议这个:bignerdranch.com/book/…。它以 C 开头,然后跳转到 Objective-C。
  • 谢谢,现在我明白是什么了
  • 在进入 Objective-C 之前,您确实需要对 C 有基本的了解。

标签: iphone ios objective-c xcode


【解决方案1】:

* 是指针声明符或解引用运算符。 在声明中,* 表示指针变量。

& 是地址运算符。

旁注:

在尝试更高级的书籍之前,您应该学习一门语言的基础知识。

【讨论】:

    【解决方案2】:

    正如一些人所指出的,这些与指针有关。关于这方面的信息非常丰富,但是,如果您是新手,您可能会觉得有些混乱。

    指出你需要知道的...

    大多数时候你有一个函数的输入和输出。

    - (int)roundMyFloat:(float)float;
    

    这里的输入是浮点数,输出是整数。

    有时您需要一个方法的多个输出。一种常见的情况是您可能希望返回错误代码以及成功参数。

    - (BOOL)doSomthing:(NSError**)error;
    

    你会这样使用它...

    NSError* error = nil;
    BOOL sucess = [myInstance doSomething:&error];
    if (!sucess) 
    {
         NSLog(@"Error: %@", error);
    }
    

    您将error 作为“输出参数”传入。 doSomthing 的代码将接受您的错误并在需要时填写信息。

    您需要在方法声明(NSError**) 中使用两个* 声明错误参数,因为您说您想要一个指向错误对象的指针,而错误对象实际上是一个指针本身 - 所以它是一个指针指向一个指针。

    当您将错误传递给方法[myInstance doSomething:&error]; 时,您使用& 符号表示“获取我的错误对象的内存地址”。

    在您的示例中,red green 和 blue 是输出参数。 didRequestColorComponentsForRed 方法正在更改您传递给它的值。与 NSError 示例不同,red green 和 blue 不是对象,因此它们只需要在方法声明中加一颗星。这表示“接受指向CGFloat 值的指针作为参数”。

    当您调用didRequestColorComponentsForRed 方法时,您使用& 符号传递颜色组件,就像在NSError 示例中一样。这表示获取我的 CGFloat 值的内存地址并将其传递给函数。

    暂时不要太担心& 和* 语法——只要记住它的用途(输出参数)。你最终应该阅读它以解决它(实际上它很酷!)。

    希望对您有所帮助 - 不要害怕提问。

    【讨论】:

      猜你喜欢
      • 2010-12-29
      • 2014-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-03
      • 2013-05-16
      • 2011-04-03
      • 2022-01-23
      相关资源
      最近更新 更多