特定元素个数的数组作为函数入参的两个方法

本文参考了如下链接:http://www.cnblogs.com/graphics/archive/2010/07/15/1777760.html

 

数组作为入参时,自动被转换为指针。因此数组定义的元素个数的参数无法带入函数。这不符合coder的预期,也是不严格和有风险的coding。

如何解决呢,一种办法是再加一个参数,指定元素个数

void Test(int* a, int n)
{
    for (int i = 0; i < n; ++i)
    {
        cout << a[i] << endl ;
    }
}

另外一种办法是传递数组的引用,本文的重点。

void Test(int (&a)[3])
{
    for (int i = 0; i < 3; ++i)
    {
        cout << a[i] << endl ;
    }
}

这样写数组a就不会被转换为指针了,而且有了元素个数的信息,调用的时候,也必须传递一个含有3个元素的数组

int a[3] = {1, 2, 3} ;
Test(a) ;    // ok

int b[1] = {1} ;
Test(b) ;    // error, can not convert parameter a from int[1] to int(&)[3]
posted @ 2016-07-19 12:23  atoman  阅读(307)  评论(0编辑  收藏  举报