3 回答

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超1個(gè)贊
不可否認(rèn),std::vectoror std::array方法是必經(jīng)之路。
但是,只是為了解決問(wèn)題(如果這是一個(gè)學(xué)校項(xiàng)目,如果老師給您強(qiáng)制性的“您不能使用STL”),則可以避免使用指針的另一種方法是將數(shù)組包裝在struct和返回該結(jié)構(gòu)的實(shí)例。
#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;
}
注意,該結(jié)構(gòu)按值返回,并且此返回值在中分配main。
您具有返回實(shí)例的值語(yǔ)義,此外還將復(fù)制該結(jié)構(gòu),包括其中的內(nèi)部數(shù)組。

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超5個(gè)贊
您正在返回一個(gè)指向本地對(duì)象的指針。在uni
函數(shù)中,變量c
分配在堆棧上。在該函數(shù)結(jié)束時(shí),將釋放所有內(nèi)存,并且在for
循環(huán)中您將獲得未定義的結(jié)果。
如注釋中所建議,std::array
或者std::vector
將為您提供復(fù)制構(gòu)造函數(shù),該構(gòu)造函數(shù)將允許您在嘗試執(zhí)行操作時(shí)按值返回對(duì)象。否則,您將不得不訴諸類(lèi)似將輸出數(shù)組作為參數(shù)傳入的方法。

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊
您將返回一個(gè)指向要在return語(yǔ)句處釋放的數(shù)組的指針。這是一個(gè)懸空的指針。是UB。
使用std::vector
或std::array
并按值返回。有一些編譯器優(yōu)化可以避免效率低下。
- 3 回答
- 0 關(guān)注
- 707 瀏覽
添加回答
舉報(bào)