使用c来写一个函数来实现交换两个整数。

第一种

一般的方法,引用中间变量,方便快捷。

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

第二种

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

tmp虽然可能会溢出,但是依然能够达到交换的效果。

上面的都是引用了中间变量,再看看不使用中间变量的方法。

不使用中间变量虽好,但是如果a,b的值一样,说明交换的是同一个变量,执行之后的操作就会出现问题。

第三种

void swap(int *a, int *b)
{
if(a == b){
return;
}
*a = *a + *b;
*b = *a - *b;
*a = *a - *b;
}

第四种

void swap(int *a, int *b)
{
if(a == b){
return;
}
*a = *a - *b;
*b = *a + *b;
*a = *a - *b;
}

第五种

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

一般来说使用位操作比加减运算要快

第六种

void swap(int *a, int *b)
{
if(a == b){
return;
}
*a = *a * *b;
*b = *a / *b;
*a = *a / *b;
}

这种方法虽然很搓,但也是一种方法。。。

第七种

 void swap(void *a, void *b, int length)
{
void *tmp = malloc(length);
if(tmp == NULL){
fprintf(stderr, "the memory is full \n");
exit();
}
memcpy(tmp, a, length);
memcpy(a, tmp, length);
memcpy(b, a, length);
free(tmp);
tmp = NULL;
}

第七种是一种通用的写法,可以用于任何类型的变量的交换。前提,这两个变量所占空间一样

最新文章

  1. [LeetCode] Random Pick Index 随机拾取序列
  2. Eclipse导入Tomcat源码(转)
  3. Retrieving Out Params From a Stored Procedure With Python
  4. Tomcat之web项目部署
  5. c#扩展方法的理解(一:初识)
  6. VMware vSphere Client5.0与 Windows8不再有问题,解决VMware 5.0 客户端提示VMRC控制台的连接已断开
  7. Linked List Cycle II
  8. iNode for linux install
  9. linux du命令: 显示文件、目录大小
  10. HTTP - PUT 上传文件/Shell
  11. iOS 苹果app提交 ITC.apps.validation.prerelease_build_missing
  12. 新 Netflix 开源门户
  13. 如何禁用电脑USB接口
  14. rpm打包过程
  15. PV & PVC - 每天5分钟玩转 Docker 容器技术(150)
  16. drools研究后记
  17. 多线程-interrupt(),isInterrupted(),interrupted()
  18. java web eclipse中项目的加载过程
  19. UITapGestureRecognizer 的用法(轻触手势识别器)
  20. HDU - 4809 树形dp

热门文章

  1. tomcat 部署spring工程乱码解决方案
  2. HDU5812 Distance(枚举 + 分解因子)
  3. 【原】iOS学习之KVC原理
  4. iOS之01-基本语法
  5. 使用HTML 5捕捉音频与视频信息
  6. ACM The Famous Clock
  7. [ACM训练] DEV C++如何处理不能调试
  8. 【BZOJ】1436: Poi2003 Trinomial
  9. NOI模拟赛Day2
  10. js判断三个数字中的最大值