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

Mos*_*she 3 pointers initialization objective-c operators

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

UIPickerView *tweetPicker
Run Code Online (Sandbox Code Playgroud)

UIPickerView* tweetPicker
Run Code Online (Sandbox Code Playgroud)

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

Car*_*rum 14

在您展示的确切情况下,没有区别.有些人喜欢把tweetPicker它当作类型UIPickerView *,也就是指向a的指针UIPickerView.这些人通常把它写成

UIPickerView* tweetPicker;
Run Code Online (Sandbox Code Playgroud)

其他人更喜欢将其视为*tweetPickera UIPickerView,即取消引用指针给出的UIPickerView.那些人通常写道:

UIPickerView *tweetPicker;
Run Code Online (Sandbox Code Playgroud)

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

int* a, b, c;
int  *a, *b, *c;
Run Code Online (Sandbox Code Playgroud)

乍一看,新手C(或Objective-C)程序员可能会说"那些是相同的",但他们不是.在第一种情况下,b并且c是常规整数,在第二种情况下,它们是指针. a在两种情况下都是指针.

从我的角度来看,无论如何,"类型"的概念在C中是如此弱(对于类型转换的行为等),将该概念进一步扩展到指针变量是疯狂的 - 特别是对于自动和静默转换为和来自void *id你得到.