关于c++ pair自己遇到的一个问题?为何不一样?为何第一个程序不能返回pair内数组的值呢?(已经解决)

#include <string>
#include <iostream>
#include <memory>
using namespace std;
pair<int *,int *> ptr()
{
//这两个数组都定义成static的就可以了
int p1[3]={123,2,3};
int p2[3]={1234,1,2};
	return make_pair(p1,p2);
}
int main()
{
pair<int*,int*> p = ptr();
int *p1 = p.first;
int *p2 = p.second;
for(int i = 0; i != 3; ++i)
	cout << p1[i] << endl;
for(int j = 0; j != 3; ++j)
	cout << p2[j] << endl;
	return 0;
}

运行结果是: 

123
22033
-588110800
22033
1703825584
32765

后来发现,如果把函数ptr中的两个数组都定义称为static就没事了,因为这两个数组p1和p2都是局部临时量,当函数运行完毕后,返回p1和p2的pair,但是p1、p2所指向的数组早就被销毁了。所以打印出来的值早就不存在了。这就是为何不能返回临时量。

#include <string>
#include <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发狂的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值