Objective-C 指针值

标签 objective-c c pointers

我正在使用 X-Code 3.2.6(64 位)编译应用程序。该应用程序正在针对 10.5 SDK 和 32 位英特尔架构进行编译。

我已将字符数组声明为:

char iptmp[ARRAY_SIZE];

所以我这样调用一个函数:

myfunc(&iptmp);

声明 myfunc 的地方:

void myfunc(char** value)
{
  ...
};

目的是使用 strncpy 将另一个字符串的内容加载到字符数组中。当您看到下面的内容时,您可能会理解为什么我不简单地执行以下操作:strcpy(iptmp, myfunc());但问题是:

Value of iptmp prior to function call:  0xb0206f5a
Value of *value in function:            0xffffb020

我已经尝试了各种方法来解决这个问题,但似乎唯一坚持的是接收一个 UINT32 值并进行转换:

myfunc((UINT32) &iptmp);

void myfunc(UINT32 value)
{
  char* target = (char*) value;

  ...
}

这对我的代码造成了严重破坏。指针值是怎么回事?

最佳答案

这里发生的是 iptmp 是内存中的一个位置。如果你写 iptmp 你会得到数组的地址。但是,如果您编写 &iptmp,您将得到它的地址。但是,您假设您将获得一个指向数组指针的指针。

处理这个问题的最好方法就是:

void myfunc(char * value)
{
  ...
};

指针 value 将指向数组,您可以随意修改它。

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

相关文章:

objective-c - 关于 CGRectMake

python - 使用 Ctypes 来自 Void 指针的 C 类实例

c - 使用 fread() 读取多条记录

c++ - 为什么在声明对象数组时不能使用 -> 运算符?

c - 一种方法会引发段错误,而另一种则不会。有什么不同?

c - 至未签名并返回 : Casting Pointer vs Casting Dereference

objective-c - 有没有一种重复性较低的方法可以将 Action 消息转发给另一个对象?

ios - 从 Objective-C 加载基于 Swift 的 UIViewController

ios - 在 iOS 中下载 zip 文件

C - 你如何根据操作系统忽略某些代码(所以一个源代码适合所有)