我有一个数组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;
}
我如何返回那个数组? 我将如何使用它,比如我返回了一个指针我将如何访问它?
当前回答
一个简单而详细的例子,如果我忘记了概念,需要帮助,我可以参考这里。
#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;
}
其他回答
在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;
}
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风格数组的结构,因此可以应用面向对象的语义,同时保留数组原始的简单性。
最简单的方法是通过引用返回,即使你不写 符号“&”,它通过引用自动返回
void fillarr(int arr[5])
{
for(...);
}
我使用静态数组,当返回数组时,它不应该抛出错误,因为你正在返回本地变量的地址… 所以现在你可以通过将函数中的任何局部创建的变量设置为静态来发送…因为它作为全局变量....工作
#include<iostream>
using namespace std;
char *func(int n)
{
// char a[26]; /*if we use this then an error will occur because you are
// returning address of a local variable*/
static char a[26];
char temp='A';
for(int i=0;i<n;i++)
{
a[i]=temp;temp++;
}
return a;
}
int main()
{
int n=26;
char *p=func(n);
for(int i=0;i<n;i++)
cout<<*(p+i)<<" ";
//or you can also print like this
for(int i=0;i<n;i++)
cout<<p[i]<<" ";
}
这里有一个完整的例子来解决这类问题
#include <bits/stdc++.h>
using namespace std;
int* solve(int brr[],int n)
{
sort(brr,brr+n);
return brr;
}
int main()
{
int n;
cin>>n;
int arr[n];
for(int i=0;i<n;i++)
{
cin>>arr[i];
}
int *a=solve(arr,n);
for(int i=0;i<n;i++)
{
cout<<a[i]<<endl;
}
return 0;
}