C++ 返回指向传递给参数列表的数组的指针
我想返回一个指向我刚刚传递的数组的指针。为什么不允许我这么做C++ 返回指向传递给参数列表的数组的指针,c++,arrays,pointers,C++,Arrays,Pointers,我想返回一个指向我刚刚传递的数组的指针。为什么不允许我这么做 int(*func(int arr[10]))[10] { return arr; } 因为当您将数组传递给函数时,它会衰减为指针,更准确地说是指向第一个元素的指针 在您的示例中,参数arr实际上是一个指针,而不是数组(这也是为什么您不能在“数组”上使用sizeof,它获取指针的大小,而不是指针指向的内容)。当您声明一个参数,例如int-arr[X](X的值无关紧要)时,它实际上等同于声明int*arr。当您知道实际的返回类
int(*func(int arr[10]))[10]
{
return arr;
}
因为当您将数组传递给函数时,它会衰减为指针,更准确地说是指向第一个元素的指针 在您的示例中,参数
arr
实际上是一个指针,而不是数组(这也是为什么您不能在“数组”上使用sizeof
,它获取指针的大小,而不是指针指向的内容)。当您声明一个参数,例如int-arr[X]
(X
的值无关紧要)时,它实际上等同于声明int*arr
。当您知道实际的返回类型应该是什么时,也非常清楚:int*
:
int* func(int* arr)
{
return arr;
}
一种消除疑问或歧义的方法是使用:
然后,要获取指向该地址的指针(类型为int(*)[10]
),则必须像往常一样使用运算符的地址:
&arr;
关于您的注释,假设您在函数中有一个
静态
数组,以及如何返回指向该数组的实际指针,那么您将不得不使用“奇怪的”返回类型语法
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]
如上所述,使用会更清楚(IMO)。OP没有调用该函数。她的问题是关于函数声明,而不是函数调用。@KerrekSB我要说的是…:)@JoaCHIMPILBORG正在阅读C++入门,我实际上重读了有关函数返回数组和函数指针的部分。有一个函数返回指向数组的指针的示例,其声明如下:
int(*func(int a))[10]
。如果我可以按照您的建议返回数组,为什么我需要声明返回的数组大小?@vdublevsky更新了我对您评论的回答。这里要知道的重要一点是,衰减为指针的数组与指向该数组的指针不同。@JoachimPileborg谢谢!似乎我需要做一些关于数组衰减为指针与指针衰减为数组的研究
&arr;
int (*func(int x))[10]
{
static int arr[10] = { ... }; // Define and initialize array
// Some other code...
return &arr; // Return a POINTER to the array
}