C++,多维数组

use*_*347 3 c++ arrays multidimensional-array

将多维数组传递给函数时,为什么C++需要在参数li中指定除第一个维之外的所有维

CB *_*ley 11

问这个的更好方法是问为什么C++不需要指定第一个维度.

原因是对于所有数组,您不能通过值将数组传递给函数.如果您尝试声明一个采用数组的函数,编译器会将声明调整为相应的指针类型.

这意味着您指定的维度无关紧要,因为维度不构成函数签名的一部分.

例如,这些都声明了完全相同的功能.

void f(int *p);
void f(int p[]);
void f(int p[10]);
void f(int p[100]);
Run Code Online (Sandbox Code Playgroud)

当导航p函数中指向的数组时,copmiler需要的唯一信息是数组元素的大小,即sizeof(int)在这种情况下.

对于更复杂的阵列,完全相同.这些都是一样的:

void g(Type p[][10][20]);
void g(Type (*p)[10][20]);
void g(Type p[10][10][20]);
void g(Type p[99][10][20]);
Run Code Online (Sandbox Code Playgroud)

但这些都不同于:

void g(Type p[][5][20]);
Run Code Online (Sandbox Code Playgroud)

因为调整外部数组维度以外的任何内容的维度会影响(至少)外部数组元素的大小,这意味着导航数组的指针算法必须更改.