急切解决,C++调用函数时,原实参的值被莫名其妙的改变,希望各位给出一定解释!

[复制链接]
查看11 | 回复4 | 2009-7-16 11:35:51 | 显示全部楼层 |阅读模式
因为你AddList函数的用法有问题,调用函数的时候,实参给形参传递的是一个指针,把指向Num1的指针传递给L1,指向Num2的指针传递给L2,当你在函数里改变了L1\L2的值时,也改变了Num1,Num2,把函数形参部分改成(List L1,List L2)也一样,解决方法是在struct List里面重载赋值运算符,变系统默认的对象浅层复制为深层复制:struct List{Elemtype *list;int size,Maxsize;List & operator = (const List &L){ size=L.size; Maxsize=L.Maxsize; list=new Elemtype[Maxs...
回复

使用道具 举报

千问 | 2009-7-16 11:35:51 | 显示全部楼层
问题还是出在你的AddList函数里。你的思路是将Num1传给L1,再将L1赋给La,计算过程中用La存储相加后的计算结果,最后返回La。但是,由于La和L1(也就是Num1)指向的是同一块内存单元,La的改变势必导致NUM1的改变。你在函数首部的声明(const List&L1,const List&L2)只能保证L1和L2本身内容不变,而不能保证...
回复

使用道具 举报

千问 | 2009-7-16 11:35:51 | 显示全部楼层
addlist 中你没有给la申请新的空间,所以他的指向还是L1的地址,改动La就是改动L1啊...
回复

使用道具 举报

千问 | 2009-7-16 11:35:51 | 显示全部楼层
把List AddList ( const List &L1,const List &L2)的参数改成传值引用试试呢?即:list AddList(List L1,List L2).如果Number1没变的话,就说明此处的传引用有问题....
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行