很多人说如果没有提供列大小,编译器就不会知道大小信息。但编译器如何知道行大小?为什么列大小无法解释?
答案 0 :(得分:2)
在将数组作为参数传递给函数时,编译器会隐式地将数组引用转换为指针。这可以在一维数组的情况下清楚地看到,例如
int method(int *a)
int method(int a[])
这两行在这里是等价的(尽管指针和数组引用是不同的)因为每当数组出现在表达式中时,编译器会隐式生成指向数组第一个元素的指针,就像程序员编写的那样& a [ 0]。但是这个规则不是递归的,即传递2d数组被视为指向数组的指针,而不是指向指针的指针。
int method(int b[3][5]);
转换为
int method(int (*b)[5]);
由于被调用的函数没有为数组分配空间,因此行的大小并不重要,但是列的大小对于提供数组的大小仍然很重要。如需进一步参考,请访问here。