为什么在将2d数组传递给函数时指定列大小

时间:2016-06-23 04:08:30

标签: c arrays

很多人说如果没有提供列大小,编译器就不会知道大小信息。但编译器如何知道行大小?为什么列大小无法解释?

1 个答案:

答案 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