在Objective-C,我所看到的,例如:星号有时在变量类型上,有时在变量名上。为什么?
UIPickerView *tweetPicker
和
UIPickerView* tweetPicker
什么星号意味着(我知道,第一部分是欺骗...)和为什么在不同情况下的声明的不同部分呢?
在Objective-C,我所看到的,例如:星号有时在变量类型上,有时在变量名上。为什么?
UIPickerView *tweetPicker
和
UIPickerView* tweetPicker
什么星号意味着(我知道,第一部分是欺骗...)和为什么在不同情况下的声明的不同部分呢?
在确切的情况下,你显示,没有区别。有些人喜欢认为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
引用常量指针或指向常量值的指针。但是你的问题与间距有关,这并不重要。
谢谢。请原谅无知,但什么是“标量”? – Moshe 2010-03-16 05:53:23
糟糕的使用'标量',抱歉 - C规范定义了这一点。我会编辑。 – 2010-03-16 05:57:57
我只是说我喜欢带变量名称而不是类型的'*'。由于有关变量定义如何工作的规则,以另一种方式进行操作可能会导致代码混淆(尤其对于新手而言)。 – 2010-03-16 06:01:01