Objective-C中有指针的终极指南吗?

时间:2011-08-05 12:47:29

标签: objective-c

好的......我理解指针是什么以及它们如何指向存储变量的内存位置。

但是,当使用指针(星号)时,我仍然无法完全绕过头部。它对我来说似乎仍然是随机的。

有没有人对网上的好教程有任何建议,或者有哪些章节真正详细说明指针?

谢谢!

编辑:我真正想要的是一个详细的指南,该指南专门针对Objective-C,无论是在深入的网站教程还是书籍章节中。我认为这里没有足够的空间来为我充分解释。

5 个答案:

答案 0 :(得分:3)

意识到这被标记为Objective-C ..

看看here

答案 1 :(得分:2)

(联合国)幸运的是,星号*具有许多不同的含义,具体取决于上下文。那么,让我们来看看相关的。让我们为某些任意类型(比如T)写int

T x;     // variable of type x, stored somewhere in memory

T * pt;  // a pointer to a variable of type x -- doesn't have a value just yet

pt = &x; // the value of pt is now the address of the variable x

到目前为止一切顺利。我们使用星号来指定一个新的类型,即T*,它是“指向T的指针”。

但是我们用指针做什么?我们可以取消引用它来获取指针所指向地址的变量的值

T y;      // another variable of type T
y = *pt;  // equivalent to y = x;

*pt = 81; // equivalent to x = 81;

因此,如果星号是typename的一部分,那么它指定一个指针类型。如果它出现在变量名(它本身是指针类型)之前,那么它会取消引用指针。

[澄清:] 在C 中,指针自然与“address-of”运算符&齐头并进,后者用于实际获取指向某事物的指针。 在Obj-C中,作为对象分配(+初始化)的结果获得指针: T * pt = [T new];

请注意,Obj-C为传统的C和C ++指针语法提供了另一种语法,因此您可能会遇到其他伪装的指针。[/ Clarification]

(当然,星号也可以用作二元运算符,所以你可以这样:int x = 5; int * p = &x; int y = *p * *p;。)

答案 2 :(得分:2)

Growl和Adium的Peter Hosey在他的博客上发布了指南指南。他称之为"Everything you need to know about pointers in C,",但那是因为他认为丑陋的指针方面属于C而不是Obj-C。看看吧。

我不知道Clang ARC reference之外的任何参考,它描述了你现在可以把它放在Obj-C指针中的所有疯狂修饰符。如果你已经感到困惑,这不是一个好的学习资源。

答案 3 :(得分:1)

假设C指针对你没有秘密,基本上在Objective-C中有两个需要避免的注意事项:

  • NS-前缀并不总是表示一个类。有时这只是一个typedef。您必须查看参考手册。

  • Objective-C 2.0中引入的虚线表示法。尽管每个对象都是指针,但有时可以通过myObj.myVar访问实例变量,而不是(对于新手更加一致)myObj->myVar

答案 4 :(得分:0)

指针的最终指南在Kernighan & Ritchie.中。它们在Objective-C中与在C中相同。