swap(a,b)引出的问题

 

在深入理解计算机系统中有这样的一道习题,也是常见的面试题目,即不用第三个变量,实时交换二个数的值。上面代码是其实现其方法,但接下来提出了如下一个问题,如这个函数的基础上,实现将一个数组中元素头尾两端依次对调。这个函数实现起来比较简单,通过inplace_swap()这个函数把第1元素与最后一个元素对换,依此类推。书上给出如下的代码。

经过测试,如果数组元素为偶数个,其结果正确,如果数组个数为奇数个,则得到中间的元素为0。

看到这里,我想到for语句中的判断条件应该改为first < last;奇数个的话就没有必要交换了。但随后又想,就算是要判断,把二个数自己交换自己,应该得到的结果也是正确的啊??????

自己用手写了一下,觉得也应该是正确的,但我认为这书不会犯这样的低级错误,于是自己写了个简单程序测试了一下。

得到的结果是:

3,3

0

验证了书上所说的是正确的,这时我自己想了想如果自己与自己交换,则每次都是从同一个地址中取值,如*x = *x ^ *y;x所指地址的值为0,即y所指的址址中的值也为0,所以接下来的运算肯定得到结果都为0;而如果是取二个值相同但是不同的变量来交换的话,还是满足条件的。

虽然只是一个小问题,但这个小问题反应出一个人的基本功。看样子,我的内功急需加强,每天前进一小步,几年后就是一大步,加油。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值