【发布时间】:2010-10-09 13:30:22
【问题描述】:
星号总是意味着“嘿,那是一个指针!”是真的吗? 而一个指针总是持有一个内存地址?
(是的,我知道 * 用于数学运算)
例如:
NSString* myString;
或
SomeClass* thatClass;
或
(*somePointerToAStruct).myStructComponent = 5;
我觉得我需要了解的关于 Asterirsk (*) 的知识比我在定义作为类指针的变量时使用的要多。
因为有时我已经在参数声明中说 Parameter 变量是一个指针,但我仍然必须在变量前面使用星号才能访问该值。这最近发生在我想以 [myObj myMethod:&myStruct] 之类的方式将结构的指针传递给方法之后,即使我的方法声明已经说有一个参数,我也无法从该结构访问组件值( DemoStruct*)myVar 确实应该被称为指向该演示结构的指针,但我仍然不得不说:“伙计,编译器。听着!它 IIISSS 一个指针:”并写:(*myVar).myStructComponentX = 5;
我真的真的真的真的不明白为什么我要说两次。并且仅在这种情况下。
当我在 NSString* myString 的上下文中使用 Asterisk 时,我可以随意访问 myString,而无需每次都告诉编译器它是一个指针。即喜欢使用 *myString = @"yep"。
这对我来说毫无意义。
【问题讨论】:
-
这实际上是一个 C 问题,因为它不特定于 Objective-C :)
-
Objective-C 特有的是字符串对象的符号@"..."。在 Cocoa 中,此类字符串对象的类是 NSString。
-
对于像我这样不熟悉 Objective-C 的其他人来说,本教程对理解星号和其他基础知识非常有帮助:The Beginner’s Guide to Objective-C: Language and Variables
标签: objective-c pointers