如何将双数组传递给C中的函数?

时间:2010-07-10 21:06:11

标签: c arrays pointers multidimensional-array

我一直在努力解决这个问题:

如何将双数组传递给函数?

以下是一个例子:

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

我希望将此矩阵传递给名为eval_matrix的函数,

void eval_matrix(int ?) {
    ...
}

我无法弄清楚应该代替?

任何人都可以帮我解决这个问题吗?

我知道数组可以作为指针传递,但是双数组(或三重数组?)

谢谢,Boda Cydo。

2 个答案:

答案 0 :(得分:6)

要用作数组,编译器必须知道数组的内部步幅,所以它是:

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]

答案 1 :(得分:-1)

你不应该传递整个矩阵,而应该传递指针,但是,你也应该传递大小...这就是我要做的,假设它总是成对[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);