gpt4 book ai didi

c - 为什么我必须在 Objective-C 中仅在某些时候编写 *myPointerVar?

转载 作者:搜寻专家 更新时间:2023-10-30 20:05:00 27 4
gpt4 key购买 nike

这是一个我仍然不明白的问题。

有时我必须写:

NSString* myVariable;
myVariable = @"Hey!";

然后,例如,我定义了一个结构“DemoStruct”并获得了一个使用它的变量。假设我有一个结构,其中包含来自 double 类型的 x 和 y 变量。

我想将此 var 传递给一个方法,然后该方法会操作我的 var,并且我希望此操作对我将 var 传递给该方法的上下文产生影响。所以我需要一个指针,对吧。

我将它传递给这样的方法:

[someObject someMethod:&myVarThatUsesTheStruct]

该方法现在看起来像这样:

- (void)someMethod:(DemoStruct*)myVar {
(*myVar).x += 10;
}

在调用之前,结构的组件 x 假设为 1000。现在,添加 10,方法调用后为 1010。

但我真的很难不明白为什么我必须在方法中对 myVar 使用星号 *,因为我已经在方法头中说过 myVar 是指向 DemoStruct 的指针。我只是通过 &myVarThatUsesTheStruct 传递内存地址。

谁能解释一下为什么会这样?

最佳答案

如您所说,myVar 是一个指针。因此,myVar.x 是不正确的:它应该是一个指针字段,这在 C/Objective-C 中没有意义。

如果要访问指针指向的变量,必须加星号:myVar是指针,*myVar是指向的变量通过 myVar

此外,在您的情况下,您可以通过编写 myVar->x 来使用 C 的特殊构造,它严格等同于 (*myVar).x

所有这些都是标准 C,不特定于 Objective-C。

关于你的第一个例子,你不必加星号,因为你改变了指针的值,而不是变量的值:myVariable 是一个指向声明时的对象的指针time 被分配了 nil 值。下一条指令 (myVariable = @"Hey!") 是指针值的赋值:@"Hey!" 是指向 NSString 的指针> 对象。此指针的值(不是指向常量的值)被分配给 myVariable,然后指向对象 @"Hey!"

是的,这是第一次很难理解...

关于c - 为什么我必须在 Objective-C 中仅在某些时候编写 *myPointerVar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/581657/

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