方法一:创建临时变量 tmp
#include<stdio.h>
#include<stdlib.h>
void swap(int *a,int *b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
int main(){
int a = 10;
int b = 20;
printf("a = %d\nb = %d\n", a, b);
swap(&a, &b);
printf("交换后的值如下:\n");
printf("a = %d\nb = %d\n", a, b);
system("pause");
return 0;
}
/*写在代码后*/
这里的swap函数里定义的是两个指针变量
为什么定义两个指针变量
是因为函数的括号里的为形参 而形参只是实参的一份拷贝
所以说在函数里无论你怎么动形参 实参的值都不会因此而改变什么
因此也无法达到交换两个变量值得效果
反而用两个指针变量则能直接获取到两个变量的地址 若果将两个变量的地址交换了
可想而知两个变量的值也就交换了
方法二:不创建临时变量
#include<stdio.h>
#include<stdlib.h>
void swap(int *a, int *b) {
*a = *a + *b;
*b = *a - *b;
*a = *a - *b;
}
int main() {
int a = 10;
int b = 20;
printf("a = %d\nb = %d\n", a, b);
swap(&a, &b);
printf("交换后的值如下:\n");
printf("a = %d\nb = %d\n", a, b);
system("pause");
return 0;
}
/*写在代码后*/
这种写法可能会导致数值过大而溢出
因此有了第三种方法
扫描二维码关注公众号,回复:
5829007 查看本文章
方法三:位运算
#include<stdio.h>
#include<stdlib.h>
void swap(int *a, int *b) {
*a = *a ^ *b;
*b = *a ^ *b;
*a = *a ^ *b;
}
int main() {
int a = 10;
int b = 20;
printf("a = %d\nb = %d\n", a, b);
swap(&a, &b);
printf("交换后的值如下:\n");
printf("a = %d\nb = %d\n", a, b);
system("pause");
return 0;
}
仅为记录自己理解所学 说法并非全对