gpt4 book ai didi

C 指针与 Objective-C 指针

转载 作者:太空狗 更新时间:2023-10-30 03:34:09 25 4
gpt4 key购买 nike

我有 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下,但是我不能在Objective-C下执行*stringPointer = @"Chocolate milkshake";

我知道 Obj-C 处理对象而 C 不处理,但我似乎无法弄清楚为什么它在 Obj-C 中不起作用的幕后细节。任何帮助是极大的赞赏。谢谢! :)

最佳答案

在您的第一个示例中,xpointerX 具有不同的类型((int)(int *) 分别)。在您的第二个示例中,stringstringPointer 具有相同 类型 (NSString *)。试试看:

NSString *string = @"Caramel coffee", **stringPointer;

关于C 指针与 Objective-C 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1863466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com