2

为什么会这样:

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

但这不是吗?

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

2 回答 2

2

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

形式上,因为标准 C++ 规范不允许这种语法!

您可能想使用C++11std::arraystd::vector模板。

于 2012-04-28T06:10:49.573 回答
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]

于 2012-04-28T06:12:24.907 回答