gpt4 book ai didi

objective-c - Objective-C header 中的 C 指针损坏

转载 作者:行者123 更新时间:2023-11-30 14:27:08 24 4
gpt4 key购买 nike

我的 header 中有一个 CGFloat 指针,用于指向 CGFloat 数组。我这样声明:CGFloat* pointer; 。在初始化中,我尝试使用以下代码设置指针:

CGFloat newArray[2] = {
0.0f, 1.0f,
};

pointer = newArray;

这个“实际上”有效。我没有收到任何编译器错误之类的东西。当我使用以下代码设置指针后立即打印数组的第二个值时:printf("%f", pointer[1]);我得到了正确的结果(1.000000)。但是,当我在名为 next 的方法中打印数组的第二个值时,我得到 0.000000,这意味着指针不再指向数组。

我有两个问题。如何解决这个问题?为什么指针在设置后可以正常工作,但又“忘记”了它的值?

最佳答案

CGFloat newArray[2] = {
0.0f, 1.0f,
};

数组索引从 0 开始。pointer[1] 打印数组中的第二元素,而不是第一个。 指针[2]超出了数组的末尾。

CGFloat newArray[2] = {0,0};
newArray[0]; // this is the 1st item
newArray[1]; // this is the 2nd item
newArray[2]; // this is nonsense.

请注意,如果您尝试将 newArray 传递到某个地方并打算稍后使用它,那将是很糟糕的。 newArray 位于堆栈上,当范围被销毁时也会被销毁。

如果您想要一个返回两个 float 组的函数,您可以这样做:

 CGFloat *two_of_these() {
CGFloat *newArray = malloc(2 * sizeof(CGFLoat));
newArray[0] = 42.0;
newArray[1] = 59.4;
return newArray;
}

只需确保稍后对该返回值调用free即可。请注意,分配如此小的东西是极其罕见的。通常,它将是直接返回的结构。请参阅 CGPointCGRectNSRange 等...

关于objective-c - Objective-C header 中的 C 指针损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8177593/

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