【问题标题】:Asterisk sometimes on variable type, sometimes on variable name. Why?星号有时在变量类型上,有时在变量名上。为什么?
【发布时间】:2010-03-16 05:40:34
【问题描述】:

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

UIPickerView *tweetPicker

UIPickerView* tweetPicker

星号是什么意思(我知道,第一部分是骗人的......)以及为什么它在不同的上下文中出现在声明的不同部分?

【问题讨论】:

    标签: objective-c pointers initialization operators


    【解决方案1】:

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

    UIPickerView* tweetPicker;
    

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

    UIPickerView *tweetPicker;
    

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

    int* a, b, c;
    int  *a, *b, *c;
    

    乍一看,新手 C(或 Objective-C)程序员可能会说“这些都是一样的”,但事实并非如此。在第一种情况下,bc 是常规整数,在第二种情况下,它们是指针。 a 在这两种情况下都是一个指针。

    从我的角度来看,无论如何,“类型”的概念在 C 中是如此弱(与类型转换等行为有关)以至于将该概念进一步扩展到指针变量是疯狂的——尤其是在自动和静默的情况下您获得的与void *id 之间的转换。

    【讨论】:

    • 谢谢。请原谅我的无知,但什么是“标量”?
    • “标量”使用不当,抱歉 - C 规范定义了这一点。我会编辑。
    • 我只是说我更喜欢带有变量名而不是类型的*。由于有关变量定义如何工作的规则,否则会导致代码混乱(尤其是对于新手而言)。
    【解决方案2】:

    星号表示该变量是一个指针。在 Objective-C 中,所有对象都通过指针来表示。

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

    UIPickerView * tweetPicker
    

    在所有三种情况下,它们的含义相同,但风格不同。

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

    【讨论】:

    • 真的吗?位置不重要?让我检查一下。编辑:有效,那么为什么“Headfirst iPhone Development”会指示我按照我发布的方式进行操作?
    • @Moshe,在某些情况下,职位确实很重要。我会写一个答案。
    • “间距”与“位置”是什么意思?不一样吗?
    • 我有 Head First iPhone 开发这本书,我不记得它每次都告诉你以一种或另一种方式去做。我记得他们实际上使用了您在上面发布的两种样式,而 Apple 使用了我使用的样式。它们都是合法的,无关紧要。
    • 位置通常与顺序有关(您是在第一位还是第二位),间距通常与在某事之前或之后出现多少空白有关。 C 和 Objective-C 通常不关心间距,除非需要区分标记之间的差异。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 2015-06-22
    相关资源
    最近更新 更多