Как передать двойной массив функции в C? - PullRequest
4 голосов
/ 11 июля 2010

Я пытался решить эту проблему целый день:

Как передать двойной массив функции?

Вот пример:

int matrix[5][2] = { {1,2}, {3,4}, {5,6}, {7,8}, {9,10} };

И я хочу передать эту матрицу функции с именем eval_matrix,

void eval_matrix(int ?) {
    ...
}

Я не могу понять, что должно быть вместо ?

Может кто-нибудь помочь мне с этой проблемой?

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

Спасибо, Бода Чидо.

Ответы [ 2 ]

6 голосов
/ 11 июля 2010

Для использования в качестве массива компилятор должен знать внутренний шаг массива, поэтому он может быть либо:

void eval_matrix( int m[5][2] ) { ...

, либо:

void eval_matrix( int m[][2], size_t od ) { ... /* od is the outer dimension */

или просто:

void eval_matrix( int* p, size_t od, size_t id ) { ... /* ditto */

В любом случае это синтаксический сахар - массив распадается на указатель.

В первых двух случаях вы можете ссылаться на элементы массива как обычно m[i][j], но придется смещать вручную втретий случай как p[i*id + j].

0 голосов
/ 11 июля 2010

Вы не должны передавать всю матрицу, вместо этого вы должны передавать указатель, однако вы должны также передать размер ... это то, как я бы это сделал, предполагая, что это всегда пары [2].

struct pair {
   int a, b;
};

struct pair matrix[] = { {1,2}, {3,4}, {5,6}, {7,8}, {9,10} };

void eval_matrix(struct pair *matrix, size_t matrix_size) {
  ...
}

eval_matrix(matrix, sizeof(matrix) / sizeof(struct pair);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...