Chinaunix首页 | 论坛 | 博客
  • 博客访问: 457660
  • 博文数量: 134
  • 博客积分: 3056
  • 博客等级: 中校
  • 技术积分: 1150
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-14 15:53
文章分类
文章存档

2013年(1)

2010年(133)

我的朋友

分类: C/C++

2010-07-18 20:47:05

 

#include <stdio.h>

void swap1(int *a, int *b);
void swap2(int *a, int *b);
void swap3(int *a, int *b);

int main()
{
    int a = 2;
    int b = 6;

    printf("Before swap, a = %d, b = %d\n", a, b);

    swap1(&a, &b);
    printf("First swap, a = %d, b = %d\n", a, b);
    
    swap2(&a, &b);
    printf("Second swap, a = %d, b = %d\n", a, b);
    
    swap3(&a, &b);
    printf("Third swap, a = %d, b = %d\n", a, b);
    return 0;
}

void swap1(int *a, int *b)
{
    *a = *a ^ *b;
    *b = *a ^ *b;    //*b = *a ^ *b = (*a ^ *b) ^*b = *a ^ (*b ^ *b) = *a ^ 0 = *a;

    *a = *a ^ *b;    //*a = *a ^ *b = (*a ^ *b) ^*a = (*a ^ *a) ^*b = 0 ^ *b = *b;

}

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

void swap3(int *a, int *b)
{
    *a = *a + *b - (*b = *a); //*b=*a是一个复试表达式,它除了将*a赋给*b外,它本身可以当作一个数,这个数的值就是*a.

}


阅读(575) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~