为什么会这样:
void SomeFunction(int SomeArray[][30]);
但这不是吗?
void SomeFunction(int SomeArray[30][]);
为什么会这样:
void SomeFunction(int SomeArray[][30]);
但这不是吗?
void SomeFunction(int SomeArray[30][]);
直观地说,因为编译器无法计算第二个声明中形式元素的常量大小。那里的每个元素都有int[]
在编译时没有已知大小的类型。
形式上,因为标准 C++ 规范不允许这种语法!
您可能想使用C++11std::array
的std::vector
模板。
因为,当将数组作为参数传递时,第一个[]
是可选的,但是第二个以后的参数是强制性的。这就是语言语法的约定。
此外,您实际上并没有传递数组,而是传递了一个指向元素数组的指针[30]
。为了更好地解释,请看以下内容:
T a1[10], a2[10][20];
T *p1; // pointer to an 'int'
T (*p2)[20]; // pointer to an 'int[20]'
p1 = a1; // a1 decays to int[], so can be pointed by p1
p2 = a2; // a2 decays to int[][20], so can be pointed by p2
还要记住,int[]
是另一种形式,int*
是int[][20]
另一种形式int (*)[20]