我在iOS应用中使用了2D C数组。是否有可能以Objective-C方法返回?作为替代解决方案,我尝试返回指向2D C整数数组的指针,但我无法修改2D-int数组。
- (int (*)[8][8])board:(Piece *)piece
{
int (*layout)[8][8] = malloc(8 * 8 * sizeof(int));
//Cannot modify layout 2D C array
return layout;
}
我在Objective-C方面有一些经验,但在C.中没有经验。我可能会不断遇到使用C 2D数组的问题,这样我应该制作一个2D-Array Objective-C类? iOS开发人员使用的更典型的方法是什么?
答案 0 :(得分:1)
- (int **)board:(Piece *)piece
{
int **layout = malloc(8 * sizeof(int *));
for(int i=0; i<8; i++)
layout[i] = malloc(8 * sizeof(int));
return layout;
}
不要忘记最后释放内存。此外,您还可以使用一维数组和类似的方式以类似的方式访问它:
#define access(array, x, y) array[y * 8 + x]
Objective-C中的多维数组类现在也有所下降,但是你可以在其中创建一个NSArray
其他NSArray
,或者,如果其他人这样做了谷歌(我记得至少有一个实现,但不记得它的名字)
答案 1 :(得分:0)
声明int (*layout)[8][8] = malloc(8 * 8 * sizeof(int));
后,您可以更改(*layout)[x][y]=val;
之类的值。但我建议您声明int (*layout)[8]
,以便您只需layout[x][y]=val
即可访问元素。
编辑:我不知道Objective-C,但在C中,我建议的功能如下:
int (*newarray())[8] {
int (*l)[8]=malloc(64*sizeof(int));
// You can do stuff like l[2][4]=15 here
return l;
}