我需要一些iPhone sdk中ObjectiveC中2D阵列动态内存分配的例子。示例代码将不胜感激。我想声明一个指针数组,然后每个索引都会在运行时声明一个数组。
由于
答案 0 :(得分:4)
串联C数组和NSArrays很奇怪,但可以这样做:
NSMutableArray *myArrays[];
myArrays = malloc(sizeof(NSMutableArray *) * numberOfArrays);
更好的解决方案是使用NSArray的NSArray;
NSMutableArray *rows = [NSMutableArray array];
[rows addObject: [NSMutableArray array]];
[rows addObject: [NSMutableArray array]];
[rows addObject: [NSMutableArray array]];
NSMutableArray *row0 = [rows objectAtIndex: 0];
[row0 addObject: [Datum new]];
[row0 addObject: [Datum new]];
[row0 addObject: [Datum new]];
....等....
或者,直接使用指针数组:
Datum **my2DArray = malloc(sizeof(Datum *) * width * height);
然后,my2DArray
中任何给定的笛卡尔坐标都是一个简单的数学运算:
my2DArray[ x + (y * width) ] = ....;
这将有效地将任何给定(x,y)坐标转换为线性索引(实际上,y成为步幅,x成为步幅内的偏移量)。
答案 1 :(得分:0)
当然,C有动态内存分配。看看malloc和realloc。有了这个,您可以分配内存并在以后根据需要调整大小,您只需要跟踪所有内存使用情况,并且在完成后不要忘记free()。
答案 2 :(得分:-1)
对于NSArrays,您可以使用以下内容:
NSMutableArray *array2d = [[NSMutableArray alloc] init];
for (int i = 0; i < d1; i++)
{
NSMutableArray *innerArray = [NSMutableArray array];
[array2D addObject:innerArray];
for (int j = 0; j < d2; j++)
{
[innerArray addObject:myDynamicData];
}
}
如果你的意思是动态数据,那么请编辑OP,准确解释你的意思。