一种巧妙的swap函数实现方式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012351051/article/details/81153377

    我们偶尔会使用swap翻转函数,我们一般想到的实现方式如下:

  

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

   上面的代码还是比较容易理解的,使用一个中间变量即可。

  下面还有一种比较巧妙的方式:

  如下所示:

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

  乍一看,一脸懵逼吧,反正我是比较懵逼的,但是自信分析后,才发现,却是能实现,分析如下:

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

假设定义: *a = 1  *b = 2

 *a ^= *b ^= *a ^= *b;
             0001 ^  0010 = 0011   *a = 0011
       0010 ^ 0011 = 0001          *b = 0001 = 1
 0011 ^ 0001 = 0010                *a = 0010 = 2

   其中"^"为异或运算,也实现了数据的翻转。如果说这个有什么优点的话,可能就是它是直接通过指针,也就是地址进行运算的,可能运算速度更快吧,当然缺点就是让人一下子懵逼,可以装逼用吧。

猜你喜欢

转载自blog.csdn.net/u012351051/article/details/81153377