博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
温故知新系列(二)交换两个变量的值不用第三个变量
阅读量:6205 次
发布时间:2019-06-21

本文共 653 字,大约阅读时间需要 2 分钟。

  对于允许用第三个变量来转存交换两个变量的值,有指针和引用。这里很简单,直接给出代码

  
View Code

  

  不用第三个变量交换,可以通过以下两个方法

  
View Code
1 a^=b; 2 b^=a;3 a^=b;4 //或者5 a+=b;6 b=a-b;7 a=a-b;

  第一次见到是从刘汝佳老师的书上看到的,但不推荐 我们去使用。

  一直以为这是一个挺不错的想法,当然,虽然不会去用,但从没有去想以上会有bug。偶尔看到博文,发现原来这样的交换是有隐患的:

  当两个数的地址相同的时候,结果会变为0。

  
View Code
1 #include 
2 #include
3 using namespace std; 4 5 void Swap(int &a , int &b) 6 { 7 a+=b; 8 cout<
<<" "<<

  从上面的交换过程中的输出,我们发现,第一次a=a+b;的时候,a变成了40,但,别忘了,b和a是指向同一个地址的,也就是说,b的值也变化了,并且永远和a相

  等,这就是为什么交换后为0的缘由了。

 

  解决方法也很简单,就是在用两个变量交换的时候,判断a,b是否相等即可。

 

 

转载于:https://www.cnblogs.com/FreeAquar/archive/2012/07/22/2603381.html

你可能感兴趣的文章
linux下恢复误删文件
查看>>
Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide开源组件加载网络图片的优缺点比较...
查看>>
RAID的肤浅认识
查看>>
DWT算法
查看>>
linux新起之秀-linux文件属性
查看>>
Python学习笔记(二)
查看>>
如何用组策略来找到丢失的文件
查看>>
使用Apache Tomcat Maven插件部署运行 Web 项目
查看>>
centos关于”running yum-complete-transaction first...
查看>>
poxtfix+dovecot+saslauthd+courier-authlib +mysql + extmail 完整虚拟邮箱系统部署
查看>>
我的友情链接
查看>>
spark内核揭秘-02-spark集群概览
查看>>
《C语言深度剖析》学习笔记三
查看>>
深入理解Java:注解(Annotation)
查看>>
Erlang并发机制 –进程调度
查看>>
Java环境搭建若干问题
查看>>
不可不说的Java“锁”事
查看>>
XEN--转载自鸟哥的linux私房菜
查看>>
DPM 2012 SP1---安装并部署DPM 2012 SP1服务器
查看>>
工业控制系统专业术语(不断完善中)
查看>>