-1

我在目标 c 中有一个指针,称为:

 int *binary[20] ;

后来作为指针返回。

当我试图给它分配一个号码时:

binary[5]=1;

我得到错误。

我知道这binary指向 20 个单元格中的第一个单元格的地址。为什么我不能直接进入 5 号牢房?

4

3 回答 3

1

该定义int* binary[20]定义了一个包含 20 个指针的数组int。这真的是你想要的,还是你的意思int binary[20]是创建一个 20 s 的数组int

无论哪种方式,结果数组都存储在堆栈中,因此将指向该数组的指针返回给某些调用代码是错误的。(在您返回调用代码后,堆栈被展开,为您的数组保留的内存被标记为空闲。)如果您想从调用代码中使用数组,您必须在堆上分配:

int *binary = calloc(20, sizeof(int));
binary[5] = 1; // fine, even after returning from this function

这会为您提供一个指向内存的指针,即使在从函数返回后也可用。(并且调用者有责任使用 . 释放该内存free。)

无论如何,除非您有一些特定要求,否则您应该使用NSArray或类似的集合类。Objective-C 中的一般规则是尽可能使用高级 API,直到被迫使用其他 API。NSArray在一般情况下,为几个整数分配一个是完全可以接受的。

于 2013-02-11T10:27:05.640 回答
0

您已经声明了一个指针数组。

这意味着您可以在该数组中存储 20 个内存地址。

但是,binary[5]=1; 您要在其中存储整数而不是 int 的地址。

您不能像静态值一样存储地址。

于 2013-02-11T10:21:40.087 回答
0

您声明了指向整数的指针数组。你的类型是int *

如果将类型更改为int,它将起作用:

int binary[20];
binary[5] = 1;

顺便说一句,您的 Q 与 Objective-C 无关,但与 C 无关。在 Objective-C 中,鼓励您尽可能多地使用对象。(NSArrayNSValue)。

于 2013-02-11T10:26:50.987 回答