如何在C语言中将双重数组传递给函数?

5

我一整天都在尝试解决这个问题:

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

以下是一个示例:

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

我希望您能将这个矩阵传递给名为eval_matrix的函数。
void eval_matrix(int ?) {
    ...
}

我无法确定?应该被替换为什么。

有人能帮我解决这个问题吗?

我知道数组可以像指针一样传递,但是双重数组(或三重数组)呢?

谢谢,Boda Cydo.


1
可能是https://dev59.com/F3E85IYBdhLWcg3wVR-g的重复问题。 - Jens Gustedt
2个回答

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]


谢谢,我会使用第三种可能性。 - bodacydo
int** 怎么办?问题是如何将 int [][] 传递给函数。它们是非常不同的。 - Nikolai Fetissov
https://dev59.com/uHLYa4cB1Zd3GeqPdvcp - Dchris

-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);

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