我有一个数组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;
}
我如何返回那个数组? 我将如何使用它,比如我返回了一个指针我将如何访问它?
当前回答
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风格数组的结构,因此可以应用面向对象的语义,同时保留数组原始的简单性。
其他回答
int *fillarr(int arr[])
你仍然可以使用结果like
int *returned_array = fillarr(some_other_array);
if(returned_array[0] == 3)
do_important_cool_stuff();
如上所述的路径是正确的。但我认为如果我们只是返回一个函数的局部数组变量,有时它会返回垃圾值作为它的元素。
为了避免这种情况,我必须动态地创建数组并继续。大概是这样的。
int* func()
{
int* Arr = new int[100];
return Arr;
}
int main()
{
int* ArrResult = func();
cout << ArrResult[0] << " " << ArrResult[1] << endl;
return 0;
}
一个简单而详细的例子,如果我忘记了概念,需要帮助,我可以参考这里。
#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;
}
为了从函数返回一个数组,让我们在结构中定义该数组; 它看起来是这样的
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;
}
来源: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