将2D数组传递给函数而不指定第二维时的编译器错误

时间:2012-04-28 06:08:33

标签: c++ arrays compiler-errors argument-passing multidimensional-array

为什么这样做:

void SomeFunction(int SomeArray[][30]);

但这不是吗?

void SomeFunction(int SomeArray[30][]);

2 个答案:

答案 0 :(得分:2)

直观地说,因为编译器无法为第二个声明中的形式元素计算常量。每个元素都有类型int[],在编译时没有已知的大小。

形式上,因为标准C ++规范不允许使用该语法!

您可能希望使用C ++ 11的std::arraystd::vector模板。

答案 1 :(得分:2)

因为,当将数组作为参数传递时,第一个[]是可选的,但第二个参数是必需的。这就是语言语法的惯例。

此外,您实际上并未传递数组,而是指向元素数组[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]的另一种形式