方法一
定义中间变量c,吧a值赋给c,把b值赋给a,把c值赋给b,完成交换
#include <stdio.h>
int main()
{
int a = 2;
int b = 5;
int c = a;
printf("a=%d\n", a = b);
{
printf("b=%d\n", b = c);
}
return 0;
}
方法二
把a+b赋给a,然后用a-b(等于a原来的值)赋给b,再用a-b(等于b原来的值)赋给a
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 2;
int b = 5;
a = a + b;
b = a - b;
a = a - b;
printf("a=%d,b=%d", a, b);
return 0;
}
注意不可以写成
#include<stdio.h>
#include<stdlib.h>
void Swap(int x,int y)
{
int tmp = x;
x = y;
y = tmp;
}
int main()
{
int a = 10;
int b = 20;
int tmp = 0;
printf("%d,%d\n",a,b);
Swap(a,b);
printf("%d,%d\n",a,b);
return 0;
}
因为C语言中(按值传递)形参的改变 不影响实参的值
方法三
用异或
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 6;//0000 0110
int b = 4;//0000 0100
a = a ^ b;//a = 0000 0010 2
b = a ^ b;//0000 0110 b = 6
a = a ^ b;//4 a = 4;
return 0;
}
方法四:
用指针
#define _CRT_SECURE_NO_WARNINGS 1
void Swap(int *p, int *q)
{
int tmp = *p;\\正确写法
*p = *q;
*q = tmp;
}
/*void Swap2(int *p, int *q) 错误写法
{
int *tmp = p;
p = q;
q = tmp;
}*/
int main()
{
int a = 10;
int b = 20;
printf("%d,%d\n", a, b);
Swap(&a, &b);
printf("%d,%d\n", a, b);
return 0;
}
加油鸭~