交换两个变量值,老话题,下面总结的各种方法是。
为了方便,首先定义两个变量。
int a = 1; int b = 2;
一 借助暂时变量
1 交换变量值
int tmp; tmp = a; // tmp = 1 a = b; // a = 2 b = tmp; // b = 1
2 交换地址
int *p; p = &a; // tmp->1 a = &b; // a->2 b = p; // b ->1
二 不借助第三个变量
1 加减法
a = a + b // a = 3 b = a - b // b = 1 a = a - b // a = 2
2 乘除法
a = a * b // 2 b = a / b // 2 a = a / b // 1
3 异或法
// a:0000 0001 // b:0000 0010 a = a ^ b // a:0000 0011 b = a ^ b // b:0000 0001 a = a ^ b // a:0000 0010
对于上面各种方法,中间变量须要额外的内存空间。
加减法和乘除法有可能出现越界,或者被除数为0的情况,并且仅仅适用于数字运算;
比較好的是最后一种,内存低层操作(/*通用的各种数据类型*/,这个地方是我弄错,异或仅仅能用于整型, 感谢xiacanni的提醒)。
版权声明:本文博主原创文章。博客,未经同意不得转载。