C零散_关于swap()的实现的几种方法

以int类型为例。

一:

1 int tmp, left, right;

2 tmp = letf;

3 left = right;

4 right = tmp;

第一种是最为常见的,借助中间变量进行数值交换。

第二种和第三则不借助于中间变量。

 

二:

1 int left, right;

2 left = left + right - (right = left);

这种方法与编译器相关,不推荐,只做了解即可。

 

三:

1 int left, right;

2 left = left ^ right;

3 right = left ^ right;

4 left = left ^ right;

第三种相当来说难与理解一点,因为用到了C语言的按位与逻辑,我们可以拆开来看。

第2行代码跑完后,则left = left ^ right,则第3行可变为right = left ^ right ^right。根据与运算的特性(相同得0,不同得1)和交换律可知第3行实际结果为right = letf。

再到第4行left = left ^ right ,同样代入,得left = left ^ right ^ left,同理得letf = right。

此方法简单可行,推荐。但只适用于int类型的数值交换。

 

2015.3.11补充:

还可以采用宏定义的方法。因为现在开始练习分文件存储函数,宏定义放在头文件中,而其中要用到的全局变量则在main函数之前定义。

 1 //test.h

 2 #include <stdio.h>

 3 #include <stdlib.h>

 4 extern int tmp; //使用之前得声明,不能定义在头文件中,这样如果有多个.c文件的话会造成重复定义的错误

 5 #define SWAP(a, b) do{\

 6                                   tmp = (a);\

 7                                    (a) = (b);\

 8                                    (b) = tm;\

 9                                   }while(0)

10 

11 

12 //test.c

13 int tmp;

14 

15 int main(int argc, char* argv[])

16 {

17    int a = 1, b = 2;

18    SWAP(a, b)

19    return 0;

20 }

 

你可能感兴趣的:(swap)