我有以下代码,工作正常…
int testarr[3][3] = { {1,1,1},{1,1} }; [self testCall: testarr];
哪个叫这个功能:
- (void)testCall: (int[3][3]) arr { NSLog(@"cell value is %u",arr[1][1]); }
使用空格不起作用:
- (void)testCall: (int[][]) arr {
谢谢你的帮助.
解决方法
我会这样写:
- (void) testCall: (int *) aMatrice;
这样做可以避免多个mallocs和数学计算基于x,y坐标的线性数组中的单个偏移量在2D数组中是微不足道的.它还避免了int **隐含的多个mallocs以及该语言所延续的2D数组语法的局限性.
所以,如果你想要一个4×5阵列,你可能会:
#define WIDTH 4 #define HEIGHT 5 #define INDEXOF(x,y) ((y*WIDTH) + x) int *myArray = malloc(sizeof(int) * 5 * ELEMS_PER_ROW);
然后,您可以线性地或使用嵌套的for循环初始化数组:
for(int x=0; x<width; x++) for(int y=0; y<height; y++) myArray[INDEXOF(x,y)] = ... some value ...;
你会把它传递给方法,如:
[foo testCall: myArray];
虽然您可能还希望同时携带宽度和高度,或者更好的是,创建一个NSObject的IntMatrix子类,它将所有指针算术和存储包装在一个漂亮的干净API之外.
(所有代码都输入SO)