【问题标题】:NSString and Pointer [duplicate]NSString 和指针 [重复]
【发布时间】:2014-01-05 19:06:27
【问题描述】:

下面的 sn -p 打印值 10,

    int x = 10;
    int *y = &x;
    NSLog(@"Value pointed by y = %d",*y);

但是如果是下面的 NSString 指针,为什么我们不在变量名前加上 * 来检索它所指向的值。

    NSString *country = @"USA";
    NSLog(@"Value pointed by country: %@",country);

如果我遗漏了什么,请告诉我。谢谢。

【问题讨论】:

  • 因为在第二种情况下,您使用的是 %@,这意味着“使用提供的指针调用 description 并打印您从该调用中返回的 NSString。”

标签: objective-c pointers nsstring


【解决方案1】:

您可以将其视为纯粹的语法约定 - 一种将 Objective-C 保持为 C 语言的纯粹超集的方式。 Objective-C 设计者决定使用 C 指针表示对象的方式:所有对象类型的变量,包括NSString,都必须声明为指针。其实定义对象类型的变量不带星号是错误的:

NSString country; // <<== ERROR: this will not compile

【讨论】:

    【解决方案2】:

    对象总是使用指针来寻址。您不能取消引用它们。因此,取消引用对象指针是不必要的并且是错误的。

    【讨论】:

    • 补充:技术上可以取消引用对象指针,但没用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 2010-11-24
    相关资源
    最近更新 更多