父函数与子函数

在父函数中调用子函数时,要如何使得父函数中的值也改变呢?
我们以常见的数字交换问题来举例:
如图所示:在子函数中打印结果正确,

如图所示,在父函数中打印结果不正确。那么究竟是为什么不正确呢?

原因在于,父函数中a,b的值是10,20传到子函数中去相当于给子函数的a,b赋值,子函数中a,b的值做了交换并没有影响到父函数中a,b的值。他们所属不同的函数中,地址不同,也就不是同一个a和b。
这是我们常用的交换变量值的方法。
那么,指针作为一种存放地址的变量该如何实现变量值的交换呢?
方法一:

很明显,这种方法是错误的。通过调试来寻找原因
通过调试我们发现,问题在于引入了指针后我们只是将指针所保存的地址做了交换,而变量本身的值并没有交换。
方法二:
程序直接崩溃。
通过调试,我们可以发现在"*tmp=*p1"时错误,这是为什么呢?这是因为“*tmp”是一个无法访问的指针变量,也就是野指针或者叫做悬挂指针。
方法三:
至此,我们终于解决了这个问题,分析程序可以发现,这次是将指针进行了解引用,将两个指针所对应的变量值进行了交换,而指针所保存的地址并没有改变,也就最终交换成功。
综上,我们可以得到 在父函数中调用子函数时,子函数的改变要影响父函数,必须: 1、传指针  2、解引用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值