zoukankan      html  css  js  c++  java
  • c语言-交换两个整数

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

    第一种

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

    1 void swap(int *a, int *b)
    2 {
    3     int tmp = *a;
    4     *a = *b;
    5     *b = tmp;
    6 }

    第二种

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

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

    第七种

     1 void swap(void *a, void *b, int length)
     2 {
     3     void *tmp = malloc(length);
     4     if(tmp == NULL){
     5         fprintf(stderr, "the memory is full 
    ");
     6         exit(1);
     7     }
     8     memcpy(tmp, a, length);
     9     memcpy(a, tmp, length);
    10     memcpy(b, a, length);
    11     free(tmp);
    12     tmp = NULL;
    13 }

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

  • 相关阅读:
    微信小程序知识点梳理
    Vue基础知识梳理
    JQuery总结
    JS实现简单斗地主效果
    JS应用猜数游戏
    JS创建一个数组1.求和 2.求平均值 3.最大值 4.最小值 5.数组逆序 6.数组去重 0.退出
    JS数组的基本操作方法
    JS,ATM代码
    简单理解Vue中的nextTick
    Vue keep-alive实践总结
  • 原文地址:https://www.cnblogs.com/0x12345678/p/5241572.html
Copyright © 2011-2022 走看看