在Objective-C中返回类型为id的2D C数组

时间:2012-02-17 14:23:43

标签: objective-c c ios

我在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开发人员使用的更典型的方法是什么?

2 个答案:

答案 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;
}