9

下面两个函数test1和test2有什么区别吗

static int const MAXL = 3;

void test1(int t[MAXL])
{
    for (int i = 0; i < MAXL; ++i)
        t[i] = 10;   
}

void test2(int (&t)[MAXL])
{
   for (int i = 0; i < MAXL; ++i)
       t[i] = 10;    
}

通过我在 MSVC2008 中的测试,这两个函数都修改了输入数组值。似乎这两个功能的功能相同。

谁能给出需要在函数参数中引用数组的案例?

4

1 回答 1

7

第一个衰减到指向数组中第一个元素的指针,第二个是对数组的实际引用。

它们的不同之处与指针和引用通常不同的方式相同。

具体来说,在数组的情况下,对数组的引用很有用,因为您保留了确定数组大小的能力。这使您不必像在 C API 中那样将数组的大小/长度作为单独的参数传递。

我认为特别巧妙的一种实现方式涉及模板。使用模板参数,您可以让编译器自动推断数组的大小。例如:

void ProcessArray(int* pArray, std::size length)
{
    for (std::size_t i = 0; i < length; ++i)
    {
        // do something with each element in array      
    }
}

template <std::size_t N>
void ProcessArray(int (&array)[N])
{
    ProcessArray(array, N);  // (dispatch to non-template function)
}
于 2013-07-10T03:33:46.150 回答