在c ++中隐式传递数组的长度

时间:2016-10-25 19:30:36

标签: c++ parameter-passing

我曾经看过代码(来自显然足够可靠的源代码,让我记住它),似乎传达了数组的长度,同时传递它们的功能(参见下面的示例):

void foo(int [m][n] array)
{
//m and n are the rows and columns of the array
//code
}

然而,我无法找到这个来源,并开始怀疑我是否弄错了,也许,甚至想象它?有人可以评论吗?

3 个答案:

答案 0 :(得分:6)

如果您通过引用接受数组,则可以使用模板从参数中推导静态大小:

template<std::size_t X, std::size_t Y>
void print(int(&array)[X][Y])
{
    for(std::size_t x = 0; x < X; ++x)
    {
        for(std::size_t y = 0; y < Y; ++y)
            std::cout << ' ' << array[x][y];
        std::cout << '\n';
    }
}

int main()
{
    int array[][3] = {{1, 3, 5}, {2, 4, 6}};

    print(array);
}

<强>输出:

 1 3 5
 2 4 6

答案 1 :(得分:1)

在C ++中你可以做到

void foo(int array[m][n])

只要mn都是整数常量表达式。 m将被忽略,而n将影响参数类型。以上相当于

void foo(int array[][n])
void foo(int (*array)[n])

这是否与您所看到的相似 - 只有您可以知道。

答案 2 :(得分:0)

上一行是否如下所示?

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="imgFrame">
  <div class="imgclick">
    <img style="margin: 0 auto;display: table;" src="" alt="" title="" class="">
    <div class="imgclicktext" style=""></div>
  </div>
</div>
<div class="image" data-content="Not so sweet but ok!">
  <img style="margin: 0px auto;display: table;" src="https://upload.wikimedia.org/wikipedia/commons/f/f5/Howlsnow.jpg" alt="Not so sweet but ok!" title="Hottie">
</div>

编译器将为每个使用的数组大小创建一个唯一命名的函数版本。