我有以下代码可以正常工作...
int testarr[3][3] = {
{1,1,1},
{1,0,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;
这样做可以避免多个 malloc,并且基于二维数组中的 x、y 坐标计算线性数组中的单个偏移量的数学运算很简单。它还避免了 int** 隐含的多个 mallocs 和语言永久存在的 2D 数组语法的限制。
所以,如果你想要一个 4x5 数组,你可以这样做:
#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 中)
关于objective-c - 在 Objective C 中将可变长度的 int 数组作为函数参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1402250/