【问题标题】:why specify column size when pass 2d array into function为什么在将二维数组传递给函数时指定列大小
【发布时间】:2016-10-25 05:31:20
【问题描述】:

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

【问题讨论】:

标签: c arrays


【解决方案1】:

在将数组作为参数传递给函数时,编译器会隐式地将数组引用转换为指针。在一维数组的情况下可以清楚地看到这一点,比如

    int method(int *a)
    int method(int a[])

这两行在这里是等价的(尽管指针和数组引用不同),因为每当数组出现在表达式中时,编译器都会隐式生成指向数组第一个元素的指针,就像程序员写了 &a[0] .然而,这条规则不是递归的,即传递一个二维数组被视为指向数组的指针,而不是指向指针的指针。

    int method(int b[3][5]);

转换为

    int method(int (*b)[5]);

由于被调用的函数没有为数组分配空间,所以行的大小并不重要,但是列的大小对于提供数组的大小仍然很重要。如需进一步参考,您可以访问here。

【讨论】:

  • 嗨,拉吉夫。谢谢你的好帖子和参考。这真的给了我一些新的东西。不过我还是用一句话说不清楚:“由于被调用的函数没有为数组分配空间,所以不需要知道整体的大小,所以可以省略行数NROWS。数组的宽度仍然很重要”
  • 记住一个二维数组是隐含的指针数组,你知道每个数组的大小都必须提到,这里的大小是列大小。@user3529352
猜你喜欢
  • 1970-01-01
  • 2020-07-02
  • 2012-09-30
  • 2013-12-29
  • 2017-07-26
  • 2011-05-24
  • 1970-01-01
  • 1970-01-01
  • 2014-03-08
相关资源
最近更新 更多