我在目标 c 中有一个指针,称为:
int *binary[20] ;
后来作为指针返回。
当我试图给它分配一个号码时:
binary[5]=1;
我得到错误。
我知道这binary
指向 20 个单元格中的第一个单元格的地址。为什么我不能直接进入 5 号牢房?
我在目标 c 中有一个指针,称为:
int *binary[20] ;
后来作为指针返回。
当我试图给它分配一个号码时:
binary[5]=1;
我得到错误。
我知道这binary
指向 20 个单元格中的第一个单元格的地址。为什么我不能直接进入 5 号牢房?
该定义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
在一般情况下,为几个整数分配一个是完全可以接受的。
您已经声明了一个指针数组。
这意味着您可以在该数组中存储 20 个内存地址。
但是,binary[5]=1;
您要在其中存储整数而不是 int 的地址。
您不能像静态值一样存储地址。
您声明了指向整数的指针数组。你的类型是int *
。
如果将类型更改为int
,它将起作用:
int binary[20];
binary[5] = 1;
顺便说一句,您的 Q 与 Objective-C 无关,但与 C 无关。在 Objective-C 中,鼓励您尽可能多地使用对象。(NSArray
和NSValue
)。