【问题标题】:Whitespace and parentheses in pointer declarations in Objective-CObjective-C 中指针声明中的空格和括号
【发布时间】:2017-07-30 19:46:53
【问题描述】:

我从之前的问题中了解到,在 Objective-C 的指针声明中,空格是无关紧要的,例如:

float* powerPtr;

float * powerPtr;

float *powerPtr;

意思完全一样(除了风格上的考虑...)但是是

(float *)powerPtr;

(带括号)也一样吗?这些括号不是隐含地“意味着”星号应该以某种方式与 float 相关,而它应该在逻辑上与 powerPtr 更相关吗? (如果我是对的,实际的指针实际上是powerPtr,而不是float)

【问题讨论】:

    标签: objective-c pointers whitespace declaration parentheses


    【解决方案1】:

    您的代码:

    (float *)powerPtr;
    

    不是(Objective-)C 中的有效声明

    这是一个表达式,它将变量powerPtr 中的值转换为float * 类型。

    该转换的结果只是被丢弃,因为它没有被使用,您的编译器可能会给出警告 - Xcode 8 发出“未使用的表达式结果”。

    附录

    根据您的评论,您显示的语法是方法声明的一部分,例如类似:

    - (void)doSomething:(float *)powerPtr;
    

    这将发生在@interface 中。这里的括号不是用于分组本身,而是用于分隔类型。至于你关心的:

    这些括号不是隐含地“意味着”星号应该以某种方式与float 相关,而实际上它应该在逻辑上与powerPtr 相关吗?

    * 类型的一部分,float * 是“指向浮点数”的类型规范。标识符powerPtr 与整个类型规范相关联。

    HTH

    【讨论】:

    • 不是在方法定义中使用的吗?
    • - (BOOL)isEqualToString:(NSString *)other;
    • 见附录,HTH
    • 明白了,那么它是@interface 中方法的正确语法吗?
    • 是的,因为声明以 ; 结尾,在 @implementation 中没有 ; 并且在同一个地方方法体 - { ... }
    猜你喜欢
    • 1970-01-01
    • 2021-10-17
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多