返回指向传递给参数列表的数组的指针

时间:2016-08-28 15:19:06

标签: c++ arrays pointers

我想返回一个指向我刚刚传递的数组的指针。为什么我不被允许?

val(_,0)

1 个答案:

答案 0 :(得分:0)

因为当你将一个数组传递给一个函数时,它会衰减到指针,更准确地说是指向第一个元素的指针。

在您的示例中,参数arr实际上是指针而不是数组(这也是您无法在&#上使用sizeof的原因34; array",它获取指针的大小而不是指向的大小。当您声明诸如int arr[X]之类的参数(X的值并不重要)时,它实际上等同于声明int *arr。如果您知道实际的返回类型应该非常清楚:int*

int* func(int* arr)
{
    return arr;
}

消除疑虑或含糊之处的一种方法是使用std::array代替:

std::array<int, 10>& func(std::array<int, 10>& arr)
{
    return arr;
}

作为旁注,如果你有一个实际的整数数组,请说

int arr[10] = { ... };

然后获取指向它的指针(类型为int (*)[10]),那么你必须像往常一样使用address-of运算符:

&arr;

关于你的评论,假设你在函数中有一个static数组,以及将实际的指针返回到数组的内容,那么你必须使用它#34 ;怪异&#34;返回类型语法。

int (*func(int x))[10]
{
    static int arr[10] = { ... };  // Define and initialize array
    // Some other code...
    return &arr;  // Return a POINTER to the array
}

在上面的函数中,arr的类型为int[10]。数组的指针是您使用&arr时获得的,类型为int(*)[10]

现在将此类型作为返回类型扩展为函数,我们得到int (*func(...))[10]

如上所述,使用std::array会更清楚(IMO)。