我在目标c中有一个指针,叫做:
int *binary[20] ;
后来作为指针返回。
当我尝试使用以下内容为其分配编号时:
binary[5]=1;
我收到错误。
我知道binary
指向来自20个单元格的第一个单元格的地址。
为什么我不能直接进入5号单元?
答案 0 :(得分:1)
定义int* binary[20]
定义了一个包含int
的20个指针的数组。这真的是你想要的,或者你的意思是int binary[20]
创建一个20 int
的数组?
无论哪种方式,结果数组都存储在堆栈中,因此将指向此数组的指针返回给某些调用代码是错误的。 (返回调用代码后,堆栈被解除,为阵列保留的内存被标记为空闲。) 如果你想从调用代码中使用数组,你必须在堆上分配:
int *binary = calloc(20, sizeof(int));
binary[5] = 1; // fine, even after returning from this function
这将为您提供一个指向内存的指针,即使从函数返回后也可以使用该指针。 (调用者有责任使用free
释放内存。)
无论如何,除非您有一些特定要求,否则应使用NSArray
或类似的集合类。 Objective-C中的一般规则是尽可能使用高级API,直到被强制执行。在一般情况下,为几个整数分配NSArray
是完全可以接受的。
答案 1 :(得分:0)
你已经声明了一个指针数组。
这意味着您可以在该阵列中存储20个内存地址。
但是binary[5]=1;
你想要存储整数而不是int的地址。
您无法存储静态值等地址。
答案 2 :(得分:0)
您声明了指向整数的指针数组。您的类型为int *
。
如果您将类型更改为int
,则可以使用:
int binary[20];
binary[5] = 1;
顺便说一下,你的Q与Objective-C无关,但与C有关。在Objective-C中,我们鼓励你尽可能地使用对象。 (NSArray
和NSValue
)。