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

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

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

为什么?

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

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

这四个声明声明了相同的function:

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