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 關注
- 708 瀏覽
添加回答
舉報