我有一个数组int arr[5],传递给一个函数fillarr(int arr[]):
int fillarr(int arr[])
{
for(...);
return arr;
}
我如何返回那个数组? 我将如何使用它,比如我返回了一个指针我将如何访问它?
我有一个数组int arr[5],传递给一个函数fillarr(int arr[]):
int fillarr(int arr[])
{
for(...);
return arr;
}
我如何返回那个数组? 我将如何使用它,比如我返回了一个指针我将如何访问它?
当前回答
还有:
int (*func())
{
int *f = new int[10] {1,2,3};
return f;
}
int fa[10] = { 0 };
auto func2() -> int (*) [10]
{
return &fa;
}
其他回答
一个简单而详细的例子,如果我忘记了概念,需要帮助,我可以参考这里。
#include <iostream>
using namespace std;
int *ReturnArray(int arr[], int size)
{
static int MinMax[2] = {0, 0}; // must use static, else address would be deleted after the return is reached
MinMax[0] = arr[0];
MinMax[1] = arr[size - 1];
return MinMax;
}
int main()
{
int arr[] = {1, 2, 3};
int size = sizeof(arr) / sizeof(*arr);
int *ans; // pointer to hold returned array
ans = ReturnArray(arr, size); // only pointer can receive the return, not an array
cout << "Min: " << ans[0] << " Max: " << ans[1];
return 0;
}
如上所述的路径是正确的。但我认为如果我们只是返回一个函数的局部数组变量,有时它会返回垃圾值作为它的元素。
为了避免这种情况,我必须动态地创建数组并继续。大概是这样的。
int* func()
{
int* Arr = new int[100];
return Arr;
}
int main()
{
int* ArrResult = func();
cout << ArrResult[0] << " " << ArrResult[1] << endl;
return 0;
}
在这种情况下,数组变量arr实际上也可以通过隐式转换被视为指向内存中数组块开头的指针。你正在使用的语法:
int fillarr(int arr[])
有点像语法糖。你真的可以用这个替换它,它仍然可以工作:
int fillarr(int* arr)
所以在同样的意义上,你想从你的函数返回的实际上是一个指向数组中第一个元素的指针:
int* fillarr(int arr[])
你仍然可以像使用普通数组一样使用它:
int main()
{
int y[10];
int *a = fillarr(y);
cout << a[0] << endl;
}
最简单的方法是通过引用返回,即使你不写 符号“&”,它通过引用自动返回
void fillarr(int arr[5])
{
for(...);
}
template<typename T, size_t N>
using ARR_REF = T (&)[N];
template <typename T, size_t N>
ARR_REF<T,N> ArraySizeHelper(ARR_REF<T,N> arr);
#define arraysize(arr) sizeof(ArraySizeHelper(arr))