在Objective-C中返回一个types为id的2D C数组
我在iOS应用程序中使用了一个2D C数组。 有没有可能在一个客观的C方法返回这个? 作为替代解决scheme,我试图返回一个指向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数组Objective-C类? iOS开发人员将使用哪种更典型的方法?
- (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中也有multidimensional array类,但是你可以用NSArray
的内部创build一个NSArray
,或者谷歌如果其他人这样做(我记得至less有一个实现,但不能回想起它的名字)
在声明int (*layout)[8][8] = malloc(8 * 8 * sizeof(int));
,你可以改变值(*layout)[x][y]=val;
。 但是我build议你声明int (*layout)[8]
,所以你可以通过layout[x][y]=val
来访问元素。
编辑:我不知道Objective-C,但在C中,我build议的function将如下所示:
int (*newarray())[8] { int (*l)[8]=malloc(64*sizeof(int)); // You can do stuff like l[2][4]=15 here return l; }