【C语言】交换两个变量的值(函数)

方法一:创建临时变量 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;
}

仅为记录自己理解所学 说法并非全对 

猜你喜欢

转载自blog.csdn.net/qq_41359293/article/details/89154718