好的......我理解指针是什么以及它们如何指向存储变量的内存位置。
但是,当使用指针(星号)时,我仍然无法完全绕过头部。它对我来说似乎仍然是随机的。
有没有人对网上的好教程有任何建议,或者有哪些章节真正详细说明指针?
谢谢!
编辑:我真正想要的是一个详细的指南,该指南专门针对Objective-C,无论是在深入的网站教程还是书籍章节中。我认为这里没有足够的空间来为我充分解释。
答案 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中相同。