【发布时间】:2009-12-07 22:48:13
【问题描述】:
我来自 Objective-C 背景,正在努力扩展我在 C 方面的知识。然而,有一件事让我感到困惑,那就是 C 和 Obj-C 中的指针之间的区别。正如您在下面的示例中所见,两种语言之间的行为似乎有些不同,我想知道您能否帮助解释原因?
C 代码工作正常:
void myFunction()
{
int x, *pointerX;
pointerX = &x;
*pointerX = 5;
// Prints: "x is 5"
printf("x is: %i", x);
}
Obj-C 代码失败:
- (void)myMethod
{
NSString *string = @"Caramel coffee", *stringPointer;
stringPointer = &string; // Warning: Assignemnt from incompatible pointer type
*stringPointer = @"Chocolate milkshake"; // Exception: Incompatible types in assignment
NSLog(@"string is: %@", string);
}
问题:为什么不能把stringPointer赋值给string的内存地址(stringPointer = &string;),为什么C下可以执行*pointerX = 5;,但是不能执行*stringPointer = @"Chocolate milkshake"; 在 Objective-C 下?
我意识到 Obj-C 处理对象而 C 不处理,但我似乎无法弄清楚为什么它在 Obj-C 中不起作用的幕后细节。任何帮助是极大的赞赏。谢谢! :)
【问题讨论】:
-
你是想弄清楚 C 部分还是 Objective-C 部分?从您的问题来看,您似乎想学习 C,但您正在编写看起来像 C 的 Objective-C 代码 ...
-
C 部分。很抱歉造成混乱。我的背景是我已经阅读了一些 Objective-C 书籍,现在正在阅读 C 书籍。让我感到困惑的是指针在 C 中是如何工作的,这似乎有点不同(尽管 Obj-C 是建立在 C 之上的)。
-
我很确定指针在 C 和 Objective-C 中的工作方式相同,我认为您在使用 Cocoa 类而不了解如何使用它们时会感到困惑。最简单的方法是查找示例以了解如何使用 Cocoa 类来解决问题,正如我所说的,问题可能在于隐藏在您正在处理的接口类后面的类树。
-
伟大的 stefanB,我想你可能是对的。我肯定会看更多的 Cocoa 示例。非常感谢! :)
标签: c objective-c pointers