C语言 不创建临时变量(第三个变量),实现两个数的交换。

#include<stdio.h>
//不能创建临时变量(第三个变量),实现两个数的交换
void exchange1(int* x, int* y)
{
    
    
	//方法有缺陷,如果a+b的和大于了整数的范围,方法失效。
	*x = *x + *y;//a==30;b==20;
	*y = *x - *y;//a==30;b==10;
	*x = *x - *y;//a==20;b==10;
}

void exchange2(int* x, int* y)
{
    
    
	//方法没有缺陷,因为异或的运算不会产生进位。
	*x = *x ^ *y;//a异或b的结果
	*y = *x ^ *y;//(a异或b的结果)^b==a的值,再把a的值放在b中。
	*x = *x ^ *y;//(a异或b的结果)^a==b的值,再把b的值放在a中。

}

int main() 
{
    
    
	int a = 10;
	int b = 20;
	exchange1(&a, &b);
	printf("a=%d,b=%d。\n", a, b);// 20  10
	exchange2(&a, &b);
	printf("a=%d,b=%d。\n", a, b);// 10  20
}

猜你喜欢

转载自blog.csdn.net/weixin_45275802/article/details/112532307
今日推荐