从C ++函数返回一个数组

时间:2014-07-25 04:34:32

标签: c++ arrays function return

我的问题类似于this,但不一样。那个是输入数组然后返回数组。我是输入整数,并返回数组。

我有一个数组,它会得到一些数字,并使它成为一个数组。

int makearr(int a, int b, int c){
    arr[2]={a,b,c};
    return?//how can I return it
}

int main(){
    //and use it?
}

我想要的就是制作阵列并显示它。

注意: 对不起,我的软件不支持元组。

3 个答案:

答案 0 :(得分:4)

A vector

template <typename T>
std::vector<T> makearr (T a, T b, T c)
{
    T d[] = { a, b, c };
    return std::vector<T>(d, d + 3);
}

std::vector<int> x = makearr(1, 2, 3);
// access x[i]

如果所有标准容器都是 verboten ,那么:

template <typename T> struct three { T d[3]; };

template <typename T>
three<T> makearr (T a, T b, T c)
{
    three<T> d = { { a, b, c } };
    return d;
}

three<int> x = makearr(1, 2, 3);
// access x.d[i]

借用herehere,我拼凑了这个没有使用标准容器的C ++ 11解决方案:

template <typename T, unsigned N>
struct argh {
    argh (std::initializer_list<T> i) {
        std::copy_n(i.begin(), std::min(i.size(), N), v_);
    }
    T & operator [] (int i) { return v_[i]; }
    const T & operator [] (int i) const { return v_[i]; }
private:
    T v_[N];
};

template <typename T, typename... Type>
auto makearr (T&& val, Type&&... vals) -> argh<T, 1 + sizeof...(Type)>
{
    argh<T, 1 + sizeof...(Type)> arr = { val, vals... };
    return arr;
}

auto x = makearr(1, 2, 3);
// access x[i]

答案 1 :(得分:1)

这里不需要复杂,你只需要将第一个数组元素的地址返回给指针,这将最终显示数组条目。必须全局声明数组,以便main()中的ptr知道它。 代码如下:

int arr[3];   //Declare it globally
int main()
{
int *ptr;
ptr=makearr(2,4,5);
for(int i=0;i<3;i++)
{
cout<<*ptr<<endl;
ptr++;
}
return 0;
}

int* makearr(int a,int b,int c)
{
arr[0]=a;arr[1]=b;arr[2]=c;
return(&arr[0])
}

答案 2 :(得分:-4)

指针?您可以将整数存储在整数数组或整数指针中。函数不能返回数组,但它可以返回指针。

int* makearr(int a, int b, int c){
int *array = new int[3];
array = &a;
array+1 = &b;
array+2 = &c;
return array;
}

int main(){
int* arr = makearr(1,2,3);
// Do something with the array. Access the elements by dereferencing the pointer variable
std::cout<<*arr<<" "<<*(arr+1);
delete arr;
return 0;
}

如果不删除主数据中的数组指针(或者从中调用makearr方法的地方),此代码可能存在内存泄漏