为什么有时我必须用Objective-C编写*myPointerVar?
这是一个我仍然不理解的问题 有时我不得不写:为什么有时我必须用Objective-C编写*myPointerVar?,c,objective-c,pointers,C,Objective C,Pointers,这是一个我仍然不理解的问题 有时我不得不写: NSString* myVariable; myVariable = @"Hey!"; 然后,例如,我定义了一个结构“DemoStruct”,并得到一个使用它的变量。假设我有一个由double类型的x和y变量组成的结构 我想把这个var传递给一个方法,然后这个方法会对我的var进行操作,我想这个操作会对我将var传递给那个方法的上下文产生影响。所以我需要一个指针,对吗 我将其传递给如下方法: [someObject someMethod:&
NSString* myVariable;
myVariable = @"Hey!";
然后,例如,我定义了一个结构“DemoStruct”,并得到一个使用它的变量。假设我有一个由double类型的x和y变量组成的结构
我想把这个var传递给一个方法,然后这个方法会对我的var进行操作,我想这个操作会对我将var传递给那个方法的上下文产生影响。所以我需要一个指针,对吗
我将其传递给如下方法:
[someObject someMethod:&myVarThatUsesTheStruct]
- (void)someMethod:(DemoStruct*)myVar {
(*myVar).x += 10;
}
该方法现在看起来如下所示:
[someObject someMethod:&myVarThatUsesTheStruct]
- (void)someMethod:(DemoStruct*)myVar {
(*myVar).x += 10;
}
在调用之前,结构的组件x是1000。现在,添加10,在方法调用之后为1010
但是我真的很难理解为什么我必须在方法中使用星号*表示myVar,因为我已经在方法头中说过myVar是指向DemoStruct的指针。我只是将使用结构的&myvarthat传递给内存地址
有人能解释一下为什么会这样吗?正如你所说,
myVar
是一个指针。因此,myVar.x是不正确的:它将由一个指针字段执行,在C/Objective-C中没有意义
如果要访问指针指向的变量,必须添加星号:myVar
是指针,*myVar
是指针指向的变量
此外,在您的例子中,您可以通过编写myVar->x
来使用一个特殊的C构造,它严格等同于(*myVar).x
所有这些都是标准C,而不是特定于Objective-C
关于第一个示例,您不必添加星号,因为您更改的是指针的值,而不是变量的值:myVariable
是指向对象的指针,该对象在声明时被分配了nil
值。下一条指令(myVariable=@“Hey!”
)是指针值的赋值:@“Hey!”
是指向NSString
对象的指针。此指针的值(不是指向的常量的值)被指定给myVariable
,然后该变量指向对象@“嘿!”
是的,这在第一次执行时很困难…*是解引用运算符。myVar的意思就是“给我myVar指针指向的东西”。您需要这种区别,因为您需要告诉计算机您想要更改myVar指向的对象,而不是myVar本身。摘自iphone开发者门户网站上的学习目标c链接: Objective-C支持变量的强类型和弱类型 包含对象。强类型变量包括中的类名 变量类型声明。弱类型变量使用类型id 而不是对象。弱类型变量经常用于 例如集合类,其中对象的确切类型 在一个集合中可能是未知的。如果您习惯于使用 类型化语言,您可能认为使用弱类型 变量会引起问题,但它们实际上提供了巨大的 灵活性,并允许Objective-C具有更大的动态性 节目 下面的示例显示强类型变量和弱类型变量 声明: MyClass*MyObject 1;//强类型 id myObject2;//弱类型 注意第一个声明中的*。在Objective-C中,object 引用是指针。如果这对你来说没有完全意义, 别担心,你不必是一个有指针的专家就可以 从Objective-C开始编程。你只需要记住 强类型对象的变量名前面的*号 声明。id类型意味着一个指针
我不同意你最后一句话“第一次很难理解”。只有当你先学习高级语言,然后继续学习下去,这才是困难的。从低级向上使这些成为编程中最简单的事情!是的,当我写下最后一句话时,我的想法是:“对于指针的教程,学习汇编语言”