交换两个变量的值,不使用第三个变量的四种法方法
通常我们的做法是(尤其是在学习阶段):定义一个新的变量,借助它完成交换。
代码如下:
int a,b;
a=10; b=15;
int t;
t=a; a=b; b=t;
![a3f32c77e09383d85c8d5bb13e1df934.png](https://i-blog.csdnimg.cn/blog_migrate/82f6b80efb86dece759eea23751abd7b.jpeg)
上面的算法最大的缺点就是需要借助一个临时变量。那么不借助临时变量可以实现交换吗?答案是肯定的!这里我们可以用三种算法来实现:1)算术运算;2)指针地址操作;3)位运算;4)栈实现。
1) 算术运算
int a,b; a=10;b=12; a=b-a; //a=2;b=12 b=b-a; //a=2;b=10 a=b+a; //a=10;b=10
2) 指针地址操作
因为对地址的操作实际上进行的是整数运算,比如:两个地址相减得到一个整数,表示两个变量在内存中的储存位置隔了多少个字节;地址和一个整数相加即“a+10”表示以a为基地址的在a后10个a类数据单元的地址。所以理论上可以通过和算术算法类似的运算来完成地址的交换,从而达到交换变量的目的。即:
int *a