我想返回一个指向我刚刚传递的数组的指针。为什么我不被允许?
val(_,0)
答案 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)。