Objective-C 中指针声明中的空格和括号

Whitespace and parentheses in pointer declarations in Objective-C

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

float* powerPtr;

float * powerPtr;

float *powerPtr;

意思完全相同(除了文体方面的考虑...)但是

(float *)powerPtr;

(带括号)也一样吗?这些括号是否隐含 "mean" 星号应该以某种方式与 float 相关,而它应该在逻辑上与 powerPtr[= 相关21=]? (实际指针实际上是powerPtr,不是float,如果我没看错的话)

您的代码:

(float *)powerPtr;

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

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

类型

该转换的结果只是因为未使用而被丢弃,您的编译器可能会发出警告 - Xcode 8 发出 "Expression result unused"。

附录

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

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

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

Don't these parentheses implicitly "mean" that the asterisk should be in some way related to float, when it should be instead more logically related to powerPtr?

*是类型的部分,float *是"pointer to float"的类型规范。标识符 powerPtr 与整个类型规范相关联。

HTH