我有 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;
),以及为什么我能够执行*pointerX = 5;
在C下,但我无法执行*stringPointer = @"Chocolate milkshake";
在 Objective-C 下?
我意识到 Obj-C 处理对象,而 C 不处理对象,但我似乎无法弄清楚为什么它在 Obj-C 中不起作用的幕后细节。任何帮助是极大的赞赏。谢谢! :)
在你的第一个例子中,x
and pointerX
有不同的类型((int)
and (int *)
分别)。在你的第二个例子中,string
and stringPointer
有same type (NSString *
)。尝试改为:
NSString *string = @"Caramel coffee", **stringPointer;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)