在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; }