繁体   English   中英

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

[英]Compiler error when passing 2D array to a function without specifiying 2nd dimension

为什么这样做:

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

但这不是吗?

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

直观上,因为编译器无法为第二个声明中的形式元素计算恒定大小。 那里的每个元素都具有int[]类型,该类型在编译时不知道大小。

正式地,因为标准的C ++规范不允许该语法!

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

因为在将数组作为参数传递时,第一个[]是可选的,但是第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]另一种形式

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM