为什么我们在将多维数组传递给函数时可以省略第一维?
在我的编程课上,我们被告知当将多维数组传递给函数时,可以省略第一维,例如,
为什么呢?
在我的编程课上,我们被告知当将多维数组传递给函数时,可以省略第一维,例如,
a[10][15][20]
可以作为a[][15][20]
传递。为什么呢?
a[10][15][20]
可以作为a[][15][20]
传递。a[i][j][k]
的偏移量是 i*nj*nk+j*nk+k
(其中 nj
和 nk
是相应的维度)。你不能将数组传递给函数。任何声明为采用数组类型的函数都会自动调整为采用相应指针类型。当你在函数调用表达式中使用数组名称时,它会衰减为指向其第一个元素的指针。
这四个声明声明了相同的函数:
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]);
void f(int b[100][15][20]);
应该改为 10
而不是 100
,这样它就和第一种方式相同了。因此,就不应该有第四种方式。 - Abhishek Mane