交换两个变量值的方法

如何交换两个变量的值在我们编写代码的时候非常常见,也是一个比较经典的算法了,下面我们就从操作系统中堆栈的角度来说一说这个算法,首先我们先看下面这段代码。

这段看起来没有任何错误的代码执行出来的结果却是这样:

显然并没有得出我们想要的结果,原因就在于,我们在exchange()函数中完成的交换变量的操作其实并没有改变原来的num1和num2的值,在系统堆栈中,从主函数开始,首先将num1和num2的值入栈,然后执行调用exchange()函数的操作,这时候在栈中会有一个保护主函数现场信息的操作,以便调用完exchange()函数后回到主函数中继续进行下一步操作,然后将exchange(num1,num2)中的实参变量从右到左依次入栈,此时形参与实参对应起来,开始进行exchange()函数中的操作,但此刻已完成的交换变量的操作相当于是在另一个与之前主函数中定义的变量毫无关系的空间中完成的,因此原来的变量值并没有被改变。

因此我们修改方案,使用另一个方法进行操作:

执行结果:

找到错误原因之后修改代码便变的简单了许多,其实我们只是利用指针来解决了这个问题,在exchange()函数中,交换变成了,将one所指的空间的值赋值给tmp空间,将another所指的空间的值赋值给one空间,再将tmp空间的值赋值给another所指向的空间,这样利用指针直接对原先定义的变量进行操作,并且在系统堆栈中,存在的就不是再次复制一份的值而是存储原先变量的地址,因此能够交换成功。


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值