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

bod*_*ydo 4 c arrays pointers multidimensional-array

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

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

这是一个例子:

int matrix[5][2] = { {1,2}, {3,4}, {5,6}, {7,8}, {9,10} };
Run Code Online (Sandbox Code Playgroud)

我希望将此矩阵传递给函数named eval_matrix,

void eval_matrix(int ?) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚应该代替什么 ?

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

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

谢谢,Boda Cydo.

Nik*_*sov 6

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

void eval_matrix( int m[5][2] ) { ...
Run Code Online (Sandbox Code Playgroud)

要么:

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

要不就:

void eval_matrix( int* p, size_t od, size_t id ) { ... /* ditto */
Run Code Online (Sandbox Code Playgroud)

在任何情况下它都是语法糖 - 数组被衰减为指针.

在前两种情况下,您可以像往常一样引用数组元素m[i][j],但必须在第三种情况下手动偏移p[i*id + j].