当我们将多维数组传递给函数时,为什么我们可以省略多维数组的第一维

时间:2011-11-20 22:10:49

标签: c multidimensional-array

为什么在将多维数组传递给函数时,我们可以省略多维数组的第一维?

在我的编程课中,我们被告知当将多维数组传递给函数时我们可以省略第一维,例如,a[10][15][20]可以作为a[][15][20]传递。

为什么?

2 个答案:

答案 0 :(得分:9)

因为数组会衰减到指针并计算到数组元素的偏移量,所以您不需要知道最里面的维度。 a[i][j][k]的偏移量为i*nj*nk+j*nk+k(其中njnk是相应的维度)。

答案 1 :(得分:3)

您无法将数组传递给函数。任何声明为采用数组类型的函数都会自动调整为采用相应的指针类型。当您在函数调用表达式中使用数组的名称时,它会衰减到指向其第一个元素的指针。

这四个声明声明了相同的功能:

void f(int b[10][15][20]);
void f(int (*b)[15][20]);
void f(int b[][15][20]);
void f(int b[100][15][20]);

并且,给定int a[10][15][20];,这些函数调用是相同的:

f(a);
f(&a[0]);