使用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;
}

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

c语言-交换两个整数的更多相关文章

  1. 黑马程序员-- C语言交换两个整数变量值几种函数比较

    总结了C语言中几种交换两个整数数值的函数,欢迎交流 #include <stdio.h> 使用多种交换变量值的函数比较 方法一:使用第三方临时变量 这种函数a,b只是值传递,实质上不能修交 ...

  2. 面试题:如何在不使用临时变量temp的情况下交换两个整数的值?

    利用一个小技巧,一个整数a在异或另一个整数b两次以后所得的值还是整数a. 具体的过程我们可以自己找两个整数以二进制的形式自己在纸上画一下他们的异或过程.(异或的运算符号为"^") ...

  3. PTA 面向对象程序设计 6-1 引用作函数形参交换两个整数

    引用作函数形参交换两个整数 设计一个void类型的函数Swap,该函数有两个引用类型的参数,函数功能为实现两个整数交换的操作. 裁判测试程序样例: #include <iostream> ...

  4. 用swap函数交换两个整数

    #include<stdio.h> //头文件 main() //主函数 { void swap(int *p,int *q); //声明 int a,b; //定义两个整数 int *p ...

  5. 用异或运算交换两个整数实现swap函数功能

    对于异或运算有这如下说明: 1^1=0 0^0=0 1^0=1 0^1=1 简单理解就是当两个书相同时结果为0,而两个数不同时异或的结果为1 可用于两个整数的交换,而不用去引入一个中间变量 #incl ...

  6. C语言交换两个数的值

    #include<stdio.h> int main() { //交换两个数的值 // 方法一 可读性最好 ; ; int temp ; temp = a; a = b; b = temp ...

  7. c语言交换两个变量的值

    有两个变量a 和b,想要交换它们的值 int a,b; 能不能这样操作呢? b=a; a=b; 不能啊,这样操作的意思是把a的值放到b中,然后b中的值已经被覆盖掉了,已经不是b原来的那个值了,所以是没 ...

  8. 一个BUG?Visual Studio 2017 C++编写交换两个整数

    想用一句话搞定交换: int a = 2, b = 5; cout << "a = " << a << ", b = " & ...

  9. C语言交换两个指针所指位置的数值

    交换指针变量x和y所指向的存储位置处存放的值,不需要第三个位置来存储临时变量.这种方式并没有性能上的优势. void replace(int *x, int *y) { *y = *x ^ *y; * ...

随机推荐

  1. TFS安装与管理

    整了几天TFS,把相关的一些配置与安装的要点简单记下,希望对大家有用.本篇主要是安装与配置上的内容,下一篇会介绍如何使用以及使用方面的相关心得体会. 本篇内容简要: 1.   安装部署 1.1.  流 ...

  2. HD1847-(博弈论??)

    Good Luck in CET-4 Everybody! Problem Description 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知 ...

  3. glup Browsersync

    http://www.browsersync.cn/#installhttp://www.browsersync.cn/docs/gulp/http://www.mamicode.com/info-d ...

  4. node.js的request模块

    request模块让http请求变的更加简单.最简单的一个示例: 1: var request = require('request'); 2:  3: request('http://www.goo ...

  5. mobile web HTML5 app曾经的踩过坑(转)

    兼容性一直是前端工程师心中永远的痛.手机浏览器,因为基本是webkit(blink)内核当道,很多公司,不用考虑IE系的浏览器,所以感觉兼容性上的问题可能会少一些. 但是手机端,虽然出了很多工具,但是 ...

  6. [ACM训练] DEV C++如何处理不能调试

    复试上机一定要用DEV C++,使用不熟练,出现一些问题,记录如下: 1.DEV C++ 不能调试 (1)tools->compiler option->settings:linker里设 ...

  7. 【BZOJ】3676: [Apio2014]回文串

    http://www.lydsy.com/JudgeOnline/problem.php?id=3676 题意:给一个串求回文串×出现次数的最大值.(|S|<=300000) #include ...

  8. 【BZOJ】2242: [SDOI2011]计算器

    http://www.lydsy.com/JudgeOnline/problem.php?id=2242 题意:(前两个问略...)第三个问是,求$a^x \equiv b \pmod{p}$最小的$ ...

  9. IEqualityComparer<T>

    在linq中使用union和distinct都不起作用,结果发现必须传入一个实现了IEqualityComparer<T>的比较器 public class CompareUser : I ...

  10. GNU for x86汇编语法

    作者:冯老师,华清远见嵌入式学院讲师. 译自“Using as The GNU Assembler January 1994”. 参考Tornado随机文档“GNU Toolkit User's Gu ...