C 当我们将多维数组传递给函数时,为什么可以忽略它的第一个维度
当我们将多维数组传递给函数时,为什么可以忽略它的第一个维度 在我的编程课上,我们被告知在将多维数组传递给函数时可以省略第一个维度,例如,C 当我们将多维数组传递给函数时,为什么可以忽略它的第一个维度,c,multidimensional-array,C,Multidimensional Array,当我们将多维数组传递给函数时,为什么可以忽略它的第一个维度 在我的编程课上,我们被告知在将多维数组传递给函数时可以省略第一个维度,例如,a[10][15][20]可以作为a[][15][20]传递 为什么?不能将数组传递给函数。声明为采用数组类型的任何函数都会自动调整为采用相应的指针类型。在函数调用表达式中使用数组名称时,它将衰减为指向其第一个元素的指针 这四个声明声明了相同的函数: void f(int b[10][15][20]); void f(int (*b)[15][20]); voi
a[10][15][20]
可以作为a[][15][20]
传递
为什么?不能将数组传递给函数。声明为采用数组类型的任何函数都会自动调整为采用相应的指针类型。在函数调用表达式中使用数组名称时,它将衰减为指向其第一个元素的指针 这四个声明声明了相同的函数:
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]);
以及(给定inta[10][15][20];代码>,这些函数调用是相同的:
f(a);
f(&a[0]);
因为数组将衰减为指针,并且要计算到数组元素的偏移量,您不需要知道最里面的维度。a[i][j][k]
的偏移量是i*nj*nk+j*nk+k
(其中nj
和nk
是对应的维度)。公认的答案很好地解释了这一点。将n维数组想象为一个包含n-1维元素的简单数组。就像你没有通过一维数组的大小一样,你也没有通过n维数组的第一维数组的大小。嗯,因为打字错误而导致的下一票?还是我遗漏了什么?@MichaelKrelin hacker:大概是因为我的答案错了或没有帮助。我希望对完全离题、误导或有害的答案进行否决,所以我一直在想我在这里遗漏了什么……不,我没有因为拼写错误而否决,我不知道是谁否决了。