我是靠谱客的博主 激动花瓣,最近开发中收集的这篇文章主要介绍C语言使用宏实现2个变量的交换,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  记录哪个方法更普适,更高效,这些方法不包括使用函数的方法,如果使用函数的话,使用指针的方法更合适。

  •   使用中间变量

  形如 int tmp, tmp = a; a=b; b = tmp;

 1 #define SWAP(a, b) {typeof(a) _t=a; a=b; b=_t;} 

  通杀,唯一缺点是需要额外的堆栈空间。

 

  •   使用算术方法

 1 #define SWAP(x, y) (x) = (x)+(y); (y) = (x)-(y);(x) = (x)-(y); 

   不能使用,x+y会有可能导致数据溢出,那么就玩完了,且只能对基本数据类型操作,构造数据类型不能使用。

 

  •   费脑异或法

 1 #define SWAP(x, y) (x)^=(y); (y)^=(x);(x)^=(y); 

  费脑,且只能对基本数据类型操作,构造数据类型不能使用。

 

那么对比1,3的效率,分别使用2个宏运行如下代码:

int main(int argc, const char *argv[])
{
unsigned int k = 0xFFFFFFF;
int a = 5;
int b = 10;
while ( k-- )
{
SWAP(a, b);
}
return 0;
}

 

使用 time ./main 计时,异或法耗时2.2-2.4s, 中间变量法耗时0.7-0.8s,效率提高了3倍。

转载于:https://www.cnblogs.com/thammer/p/4491208.html

最后

以上就是激动花瓣为你收集整理的C语言使用宏实现2个变量的交换的全部内容,希望文章能够帮你解决C语言使用宏实现2个变量的交换所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部