我的问题类似于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?
}
我想要的就是制作阵列并显示它。
注意: 对不起,我的软件不支持元组。
答案 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]
借用here和here,我拼凑了这个没有使用标准容器的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方法的地方),此代码可能存在内存泄漏