我试图返回一个简单的数组,但我没有得到正确的结果.我得到以下内容
arr1[0] = 1
arr1[1] = 32767
Run Code Online (Sandbox Code Playgroud)
结果应该是结果
arr1[0] = 1
arr1[1] = 15
Run Code Online (Sandbox Code Playgroud)
请建议.
int *sum(int a, int b){
int arr[2];
int *a1;
int result = a+b;
arr[0]= 1;
arr[1]= result;
a1 = arr;
return a1;
}
int main(){
int *arr1 = sum(5,10);
cout<<"arr1[0] = "<<arr1[0]<<endl;
cout<<"arr1[1] = "<<arr1[1]<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Unc*_*ens 16
你不能返回数组.你要返回的只是一个指向本地对象的指针,当函数返回时,它会在超出作用域时被销毁.
您可以传入指向数组的指针,因此该函数会修改该数组.
此外,如果数组包含在struct/class中,则可以返回数组的副本,例如std::tr1::array(或boost::array).
试试这个...
#include <vector>
#include <iostream>
std::vector<int> sum(int a, int b)
{
std::vector<int> rv(2);
rv[0]= 1;
rv[1]= a+b;
return rv;
}
int main()
{
std::vector<int> arr1 = sum(5,10);
std::cout << "arr1[0] = " << arr1[0] << std::endl;
std::cout << "arr1[1] = " << arr1[1] << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
a1是一个局部变量,在堆栈上分配内存.如果要返回int *,则应在堆上分配内存.
int *arr = (int *)malloc(sizeof(int) * 2));
//CAUTION you need to de-allocate memory [read about free()]
Run Code Online (Sandbox Code Playgroud)
说明:
arr只要函数int *sum(int, int)没有完成,see 实际上就是一个数组.那么,你返回的实际上是实际上的地址arr,并且不再存在.当您尝试访问该内存位置时
main(),您只需获取垃圾/随机值.
您正在返回一个指向局部变量的指针 - 当sum()返回到main()数组时不再存在.
你甚至不能按值返回数组,除非你包装它们,但你可以简单地返回一个标准容器,如:std::vector或者std::pair:
std::pair<int,int> f(int a, int b) {
return std::make_pair(1, a+b);
}
int main() {
std::pair<int,int> res = f(5,10);
std::cout << res.first << ", " << res.second << std::endl;
}
Run Code Online (Sandbox Code Playgroud)