您的位置:首页 > 其它

使用typeof 实现全能数据交换

2013-02-18 23:45 288 查看
初学C语言的时候,我们都接触过数据交换的方法和技巧,最典型的就是swap函数,这个方法

在数据排序的时候是肯定会被用到的,下面就是swap函数的一个例子:

void swap(int *a , int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}


这种方法简单明了,就是创建一个临时变量来保存数据并稍做一些数据移动就行,当然数据交换

还有一种不用创建临时变量的方法,就是使用逻辑与运算,代码如下:

void swap(int *a, int *b)
{
*a = *a ^ *b;
*b = *a ^ *b;
*a = *a  ^ *b;
}


这种方法使用到位运算的技巧,理论上是最快速的方法,但是可读性太差,不推荐使用,其实仅仅一个

数据交换功能这么短的代码量,甚至不应该使用一个函数来完成,使用函数要付出调用栈的开销,应该

使用宏定义,c语言linux内核就是大量应用了宏提高了内核运行的速度。

以上的方法很明显有一个弊端就是定义方法后只能实现一种类型的数据的交换,比如上面的函数

只可以实现int类型数据的交换,如果要交换的数据是char、float、double类型的,那就必须在定义相关

的交换函数,很繁琐也很累赘,typeof关键字的使用可以帮助我们避免这种无聊的近乎重复的工作,结合

刚才的描述可定义一个宏如下:

#define SWAP(a, b)    do {\
typeof(a) _t = a;
a = b;
b = _t;
}while(0)


使用这个宏,不管要交换的数据类型是char还是int还是float都一样可以实现交换,这就是typeof的好处
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐