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

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

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


当前回答

实际上,当你在函数中传递一个数组时,指向原始数组的指针被传递到函数形参中,因此对该函数中数组所做的更改实际上是在原始数组上进行的。

#include <iostream>

using namespace std;

int* func(int ar[])
{
    for(int i=0;i<100;i++) 
        ar[i]=i;
    int *ptr=ar;
    return ptr;
}


int main() {
    int *p;
    int y[100]={0};    
    p=func(y);

    for(int i=0;i<100;i++) 
        cout<<i<<" : "<<y[i]<<'\n';
}

运行它,您将看到更改

其他回答

为了从函数返回一个数组,让我们在结构中定义该数组; 它看起来是这样的

struct Marks{
   int list[5];
}

现在让我们创建类型结构的变量。

typedef struct Marks marks;
marks marks_list;

我们可以通过以下方式将array传递给一个函数并为其赋值:

void setMarks(int marks_array[]){
   for(int i=0;i<sizeof(marks_array)/sizeof(int);i++)
       marks_list.list[i]=marks_array[i];
}

我们也可以返回数组。要返回数组,函数的返回类型应该是结构类型即标记。这是因为在现实中,我们传递的是包含数组的结构。最终的代码可能是这样的。

marks getMarks(){
 return marks_list;
}

最简单的方法是通过引用返回,即使你不写 符号“&”,它通过引用自动返回

     void fillarr(int arr[5])
  {
       for(...);

  }

为什么不把数组作为参数“返回”呢?

fillarr(int source[], size_t dimSource, int dest[], size_t dimDest)
{

    if (dimSource <= dimDest)
    {
        for (size_t i = 0; i < dimSource; i++)
        {   
            //some stuff...
        }
    }
    else 
    {
        //some stuff..
    }
}

或者用更简单的方式(但你必须知道尺寸…):

fillarr(int source[], int dest[])
{
    //...
}

如上所述的路径是正确的。但我认为如果我们只是返回一个函数的局部数组变量,有时它会返回垃圾值作为它的元素。

为了避免这种情况,我必须动态地创建数组并继续。大概是这样的。

int* func()
{
  int* Arr = new int[100];
  return Arr;
}

int main()
{
  int* ArrResult = func();
  cout << ArrResult[0] << " " << ArrResult[1] << endl;
  return 0;
} 




c++函数不能按值返回C风格的数组。最接近的方法是返回一个指针。此外,参数列表中的数组类型被简单地转换为指针。

int *fillarr( int arr[] ) { // arr "decays" to type int *
    return arr;
}

你可以通过对参数和返回使用数组引用来改进它,这可以防止衰减:

int ( &fillarr( int (&arr)[5] ) )[5] { // no decay; argument must be size 5
    return arr;
}

在Boost或c++ 11中,引用传递只是可选的,语法也不那么令人费解:

array< int, 5 > &fillarr( array< int, 5 > &arr ) {
    return arr; // "array" being boost::array or std::array
}

数组模板只是生成一个包含c风格数组的结构,因此可以应用面向对象的语义,同时保留数组原始的简单性。