C语言实现交换两个数

方法一:最普通方法--建立临时变量

思路分析:建立一个临时变量,通过temp=a,a=b,b=temp来实现交换。

缺点:这只是一种假交换,由于这只是在函数内部临时变量间的交换,所以当函数退出,函数栈帧被释放,原本的值并没有被交换。

int swap(int _x, int _y)

{

	int  z = _x;//通过建立z这个临时变量来交换_x,_y
	_x = _y;
	_y = z;
	printf("%d %d", _x, _y);
	return 0;

}


方法二:建立临时变量--建立指针

 思路简介:取两个数的地址,在swap方法中再用指针指向地址交换,这时候为数值交换(函数调用结束后原空间的值也得到了交换)。

int swap(int *_x, int *_y)//主函数中把两个数的地址传过来
{
	int  tmp = *_x;//定义中间变量 然后交换两个数
	*_x = *_y;
	*_y = tmp;
	printf("%d %d", *_x, *_y);
}


方法三:不建立临时变量--加减交换

思路分析:取两个数的和,然后通过减去另一个数来得到另一个数。

缺点:两个数的和可能会越界。(数值小的时候可以用)。同样的这是一种假交换,不能使用函数。

int main()
{
	int a = 1;
	int b = 2;
	
	a = a + b;//a=1+2
	b = a - b;//b=3-2
	a = a - b;//a=3-1

	printf("a=%d,b=%d", a, b);
	return 0;
}


方法四:最佳方法--异或方法

思路简介:通过二进制异或方法交换,如a=3二进制为11,b=2的二进制为10,按位异或(两个值相同为0,否则为1)。

int mian()
{
	int a = 3;
	int b = 5;
	
	a = a ^ b;                     //a = 3 ^ 5  
	b = a ^ b;                     //b = (3 ^ 5) ^ 5  
	a = a ^ b;                     //a = (3 ^ 5) ^ 3  

	printf("a=%d,b=%d", a, b);
	return 0;
}

你可能感兴趣的:(C语言,指针)