【发布时间】:2010-03-16 05:40:34
【问题描述】:
在 Objective-C 中,我见过,例如:
UIPickerView *tweetPicker
和
UIPickerView* tweetPicker
星号是什么意思(我知道,第一部分是骗人的......)以及为什么它在不同的上下文中出现在声明的不同部分?
【问题讨论】:
标签: objective-c pointers initialization operators
在 Objective-C 中,我见过,例如:
UIPickerView *tweetPicker
和
UIPickerView* tweetPicker
星号是什么意思(我知道,第一部分是骗人的......)以及为什么它在不同的上下文中出现在声明的不同部分?
【问题讨论】:
标签: objective-c pointers initialization operators
在您展示的确切情况下,没有区别。有些人喜欢认为tweetPicker 是UIPickerView * 类型,即指向UIPickerView 的指针。这些人通常把它写成
UIPickerView* tweetPicker;
其他人更喜欢将*tweetPicker 视为UIPickerView,也就是说,取消引用指针会得到UIPickerView。那些人通常会写:
UIPickerView *tweetPicker;
我更喜欢后者,因为 C(和 Objective-C 正因为如此)语法支持它更好。以以下变量声明为例:
int* a, b, c;
int *a, *b, *c;
乍一看,新手 C(或 Objective-C)程序员可能会说“这些都是一样的”,但事实并非如此。在第一种情况下,b 和c 是常规整数,在第二种情况下,它们是指针。 a 在这两种情况下都是一个指针。
从我的角度来看,无论如何,“类型”的概念在 C 中是如此弱(与类型转换等行为有关)以至于将该概念进一步扩展到指针变量是疯狂的——尤其是在自动和静默的情况下您获得的与void * 或id 之间的转换。
【讨论】:
*。由于有关变量定义如何工作的规则,否则会导致代码混乱(尤其是对于新手而言)。
星号表示该变量是一个指针。在 Objective-C 中,所有对象都通过指针来表示。
就其放置位置而言,这是一种风格。我个人的风格实际上是星号周围有空格。
UIPickerView * tweetPicker
在所有三种情况下,它们的含义相同,但风格不同。
编辑:间距无关紧要,但在处理关键字的极端情况下,例如const 指的是常量指针或指向常量值的指针时,位置会起作用。但是您的问题与间距有关,这无关紧要。
【讨论】: