如何将一个未知大小的二维数组作为方法参数传递

6

我正在尝试将一个大小可以动态改变的二维数组作为方法参数传递。

在方法内部,我想使用一般的数组语法来使用这个数组。

int item = array[row][column];

无法传递数组,因此我考虑使用指针指针。

- (void)doSomethingWithArray:(int **)array columns:(int)nColumns rows:(int)nRows
{
   int item = array[n][m];
}

但是当我尝试将数组作为参数传递时,出现了问题。

int array[numberOfRows][numberOfColumns];

[someObject doSomethingWithArray:array columns:numberOfColumns rows:numberOfRows];

我找到了很多技巧和窍门,但是以我想要使用的方式,似乎没有什么真正有效。

谢谢您的帮助, Eny

2个回答

5

Objective-C是否基于C99标准?

如果是,您可以使用“新”的语法直接传递维度信息。

#include <stdio.h>

void foo(int rows, int cols, int arr[rows][cols]) {
  printf("%d, %d\n", arr[0][0], arr[1][4]);
}

int main(void) {
  int arr[2][12] = {{1, 2, 3, 4, 5}, {11, 12, 13, 14, 15}};
  foo(2, 12, arr);
}

您可以在ideone上查看运行的代码

是的,Objective-C目前基于C99。你的例子很好。 - JeremyP
好的,我必须尝试一下这个,但是我仍然无法将它分配给类变量,因为我仍然不知道类接口中的大小。 - Enyra

0
- (void)doSomethingWithArray:(void *)array columns:(int)nColumns rows:(int)nRows {}
...
[someObject doSomethingWithArray:&array columns:numberOfColumns rows:numberOfRows];

但是在这种情况下,我无法以“array[x][y]”的方式访问数组。如果我编译它,就会出现“不兼容的指针类型”错误。 - Enyra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接