Как передать двумерный массив неизвестного размера в качестве аргумента метода - PullRequest
6 голосов
/ 06 мая 2011

Я пытаюсь передать двумерный массив, размер которого может быть динамическим, в качестве аргумента метода.

Внутри метода я хотел бы использовать массив с общим синтаксисом массива.

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 голосов
/ 06 мая 2011

Объектив-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 .

0 голосов
/ 06 мая 2011
- (void)doSomethingWithArray:(void *)array columns:(int)nColumns rows:(int)nRows {}
...
[someObject doSomethingWithArray:&array columns:numberOfColumns rows:numberOfRows];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...