为什么这样做:
void SomeFunction(int SomeArray[][30]);
但这不是吗?
void SomeFunction(int SomeArray[30][]);
答案 0 :(得分:2)
直观地说,因为编译器无法为第二个声明中的形式元素计算常量。每个元素都有类型int[]
,在编译时没有已知的大小。
形式上,因为标准C ++规范不允许使用该语法!
您可能希望使用C ++ 11的std::array
或std::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]
的另一种形式