Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 星号有时在变量类型上,有时在变量名称上。为什么?_Objective C_Pointers_Initialization_Operators - Fatal编程技术网

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

Objective c 星号有时在变量类型上,有时在变量名称上。为什么?,objective-c,pointers,initialization,operators,Objective C,Pointers,Initialization,Operators,例如,在Objective-C中,我看到: UIPickerView *tweetPicker 及 星号是什么意思(我知道,第一部分是重复…),为什么它会出现在不同上下文中声明的不同部分?星号表示变量是指针。在objective-C中,所有对象都通过指针表示 就它的位置而言,这是一种风格。我的个人风格实际上是在星号周围加空格 UIPickerView * tweetPicker 在这三种情况下,它们的意思相同,但风格不同 编辑:间距无关紧要,但位置在处理关键字的情况下会起作用,例如const

例如,在Objective-C中,我看到:

UIPickerView *tweetPicker


星号是什么意思(我知道,第一部分是重复…),为什么它会出现在不同上下文中声明的不同部分?

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

就它的位置而言,这是一种风格。我的个人风格实际上是在星号周围加空格

UIPickerView * tweetPicker
在这三种情况下,它们的意思相同,但风格不同


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

在你所展示的确切案例中,没有区别。有些人喜欢认为
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
之间的自动和静默转换中。

真的吗?位置不重要吗?让我看看。编辑:行得通,那么为什么“Headfirst iPhone开发”会指示我按照我发布的方式来做呢?@Moshe,这个职位在某些情况下确实很重要。我会写一个答案。你说的“间隔”和“位置”是什么意思?这不一样吗?我有一本最早的IPhone开发书,我不记得它每次都告诉你要用这种或那种方式来做。我记得他们实际上使用了你在上面发布的两种风格,苹果也使用了我使用的风格。它们都是合法的,不重要。位置通常与顺序有关(你是在第一个位置还是第二个位置),间距通常与某物前后出现多少空白有关。C和Objective-C通常不关心间距,除非需要区分令牌之间的差异。谢谢。请原谅我的无知,但是什么是“标量”?对不起,“标量”的用法不好-C规范定义了这一点。我会编辑。我只是说我更喜欢带有变量名的
*
,而不是类型。由于变量定义如何工作的规则,以另一种方式执行会导致代码混乱(特别是对于新手)。
int* a, b, c;
int  *a, *b, *c;