3 回答
TA贡献1877条经验 获得超1个赞
不可否认,std::vectoror std::array方法是必经之路。
但是,只是为了解决问题(如果这是一个学校项目,如果老师给您强制性的“您不能使用STL”),则可以避免使用指针的另一种方法是将数组包装在struct和返回该结构的实例。
#include <iostream>
using namespace std;
struct myArray
{
int array[10];
};
myArray uni(int *a,int *b)
{
myArray c;
int i=0;
while(a[i]!=-1)
{
c.array[i]=a[i];
i++;
}
for(;i<10;i++)
c.array[i]=b[i-5];
return c;
}
int main()
{
int a[10]={1,3,3,8,4,-1,-1,-1,-1,-1};
int b[5]={1,3,4,3,0};
myArray c = uni(a,b);
for(int i=0;i<10;i++)
cout << c.array[i] << " ";
cout << "\n";
return 0;
}
注意,该结构按值返回,并且此返回值在中分配main。
您具有返回实例的值语义,此外还将复制该结构,包括其中的内部数组。
TA贡献1772条经验 获得超5个赞
您正在返回一个指向本地对象的指针。在uni
函数中,变量c
分配在堆栈上。在该函数结束时,将释放所有内存,并且在for
循环中您将获得未定义的结果。
如注释中所建议,std::array
或者std::vector
将为您提供复制构造函数,该构造函数将允许您在尝试执行操作时按值返回对象。否则,您将不得不诉诸类似将输出数组作为参数传入的方法。
TA贡献1828条经验 获得超4个赞
您将返回一个指向要在return语句处释放的数组的指针。这是一个悬空的指针。是UB。
使用std::vector
或std::array
并按值返回。有一些编译器优化可以避免效率低下。
- 3 回答
- 0 关注
- 665 浏览
添加回答
举报