我有一个数组int arr[5],传递给一个函数fillarr(int arr[]):

int fillarr(int arr[])
{
    for(...);
    return arr;
}

我如何返回那个数组? 我将如何使用它,比如我返回了一个指针我将如何访问它?


当前回答

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))

其他回答

8.3.5/8州-

函数的返回类型不应该是数组或函数,尽管它们可以有类型指针或引用的返回类型。不应该有函数数组,尽管可以有指向函数的指针数组。”

int (&fn1(int (&arr)[5]))[5]{     // declare fn1 as returning refernce to array
   return arr;
}

int *fn2(int arr[]){              // declare fn2 as returning pointer to array
   return arr;
}


int main(){
   int buf[5];
   fn1(buf);
   fn2(buf);
}

在c++ 11中,可以返回std::array。

#include <array>
using namespace std;

array<int, 5> fillarr(int arr[])
{
    array<int, 5> arr2;
    for(int i=0; i<5; ++i) {
        arr2[i]=arr[i]*2;
    }
    return arr2;
}

来源:https://www.tutorialspoint.com/cplusplus/cpp_return_arrays_from_functions.htm

c++不允许将整个数组作为函数的参数返回。但是,您可以通过指定数组的名称而不指定索引来返回指向数组的指针。

如果你想从一个函数返回一个一维数组,你必须声明一个函数返回一个指针,如下面的例子所示:

int * myFunction() { . . . }

c++不提倡将局部变量的地址返回给函数外部,因此必须将局部变量定义为静态变量。

将这些规则应用于当前问题,我们可以编写如下程序:

# include <iostream> 使用命名空间std; Int * fillarr(); Int main () { int * p; P = fillarr(); For (int I = 0;I < 5;我+ +) Cout << "p[" << I << "]: "<< *(p + I) << endl; 返回0; } Int * fillarr() { 静态int arr[5]; For (int I = 0;I < 5;+ + i) Arr [i] = i; 返回arr; }

输出将是:

p[0]=0
p[1]=1
p[2]=2
p[3]=3
p[4]=4
int *fillarr(int arr[])

你仍然可以使用结果like

int *returned_array = fillarr(some_other_array);
if(returned_array[0] == 3)
    do_important_cool_stuff();
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))