简单的程序 输出为什么不同?

swat_01 2010-04-26 06:38:20

#include<iostream>
using namespace std;

class a
{
public:
a(int t=0) {data=t;link=0;}
int &Getdata() {return data;}
a *Getlink() {return link; }
void Setlink(a t) {link=&t; }
int Getnextdata() {return link->data;}
private:
int data;
a *link;
};


int main()
{
a t1(1);
a t2(2);
t1.Setlink(t2);

cout<<t2.Getdata()<<endl;
cout<<t1.Getnextdata()<<endl;
cout<<(*t1.Getlink()).Getdata()<<endl;
cout<<t1.Getlink()->Getdata();

int i;
cin>>i;
return 0;
}


这是一个简单的程序 想问为什么最后输出的四个结果都不同?
...全文
62 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengzhixi 2010-04-26
  • 打赏
  • 举报
回复
可以结贴了。
shiweifu 2010-04-26
  • 打赏
  • 举报
回复
内牛满面。。稍微会的一点C++都快忘了
shiweifu 2010-04-26
  • 打赏
  • 举报
回复
void Setlink(a &t)
{
//t在这个函数结束的时候,就被销毁了,所以link指向的是不存在的地址
link=&t;
}
int Getnextdata()
{
//不存在还访问。。显然是错的
return link->data;
}
jay1002008 2010-04-26
  • 打赏
  • 举报
回复
楼上正解
jiuchang 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 silverwings 的回复:]

void Setlink(a t) {link=&t; }
这个函数你是用的值传递,link指向的是分配在栈上的临时对象
退出函数时那个对象就被析构了,此时link已经是个野指针了
改成引用就可以了
void Setlink(a &t) {link=&t; }
[/Quote]

1楼的正确
SilverWings 2010-04-26
  • 打赏
  • 举报
回复
void Setlink(a t) {link=&t; }
这个函数你是用的值传递,link指向的是分配在栈上的临时对象
退出函数时那个对象就被析构了,此时link已经是个野指针了
改成引用就可以了
void Setlink(a &t) {link=&t; }
微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 微信小程序系统教程共有“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]——核心技术”、“微信小程序系统教程[阶段]客服消息+微信支付+九宝电商系统”。 “微信小程序系统教程[阶段]全套课程”包含: 1.微信小程序系统教程[阶段]_客服消息 2.微信小程序系统教程[阶段]_微信支付 3.微信小程序系统教程[阶段]_九宝电商系统 学习“微信小程序系统教程[阶段]”要求有微信小程序的基础。建议先学习“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]”,后在报名“微信小程序系统教程[阶段]”。 阶段讲解的客服消息,是针对小程序的。后台程序用接近底层的技术,没有使用三方技术。这样降低同学们学习成本。 微信支付,这部分课程很有难度,要求同学们认真听讲,有不会的技术问题可以请教老师。购买课程后请联系老师,提供单号,给你源程序。 九宝电商系统是一套十分适和学习、项目的课程。既可以系统的学习微信小程序相关知识,还可以修改后上线。 “微信小程序系统教程[中级阶段]——核心技术”重点讲解微信小程序事件、组件、API 微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 购买课程的同学,可赠送就九宝老师编写的《微信小程序开发宝典》。 购课请咨询qq2326321088

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧