objective-c - 在 Objective C 中将可变长度的 int 数组作为函数参数传递

标签 objective-c arrays function parameters

我有以下代码可以正常工作...

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/

相关文章:

javascript - 在 Objective C 中生成 js 对象文字

objective-c - 使用 NSInputStream 读取 .mov 文件,同时使用 AVCaptureMovieFileOutput 写入

ios - UIAlertController 自定义字体、大小、颜色

java - 类构造函数中的 ArrayIndexOutOfBounds

iOS 不保存所有图像

iPhone SDK : Forcing landscape mode for a single part of an app

javascript - 具有来自给定键和值数组的键/值对的对象数组

c++ - 错误 : name lookup of 'i' changed for ISO 'for' scoping

python - 函数内的变量

c++ - 我的函数跳过了 C++ 中的循环参数