星号有时在变量类型上,有时在变量名称上。为什么?

时间:2010-03-16 05:40:35

标签: objective-c pointers initialization operators

在Objective-C中,我见过,例如:

UIPickerView *tweetPicker

UIPickerView* tweetPicker

星号是什么意思(我知道,第一部分是骗局......)为什么它会在不同背景下的声明的不同部分进行?

2 个答案:

答案 0 :(得分:14)

在您展示的确切情况下,没有区别。有些人喜欢将tweetPicker视为UIPickerView *类型,即指向UIPickerView的指针。这些人通常把它写成

UIPickerView* tweetPicker;

其他人更喜欢将其视为*tweetPickerUIPickerView,也就是说,取消引用指针会产生UIPickerView。那些人通常写道:

UIPickerView *tweetPicker;

我更喜欢后者,因为C(和Objective-C因此)语法更好地支持它。例如,以下变量声明:

int* a, b, c;
int  *a, *b, *c;
乍一看,新手C(或Objective-C)程序员可能会说“那些是相同的”,但他们不是。在第一种情况下,bc是常规整数,在第二种情况下,它们是指针。 <{1}}是两种情况下的指针。

从我的角度来看,无论如何,“类型”的概念在C中是如此弱(对于类型转换的行为等),将该概念进一步扩展到指针变量是疯狂的 - 特别是对于自动&amp;来自avoid *的无声转换。

答案 1 :(得分:1)

星号表示变量是指针。在objective-C中,所有对象都通过指针表示。

就放置的地方而言,这是一种风格的东西。我的个人风格实际上是星号周围的空格。

UIPickerView * tweetPicker

在所有三种情况下,它们的意思相同,但风格各异。

编辑:间距无关紧要,但在处理关键字的极端情况下,位置会起作用,例如if const是指常量指针还是指向常量值的指针。但你的问题与间距有关,这无关紧要。