c语言交换两个数的值的几种方法

1. 临时变量法

创建一个临时变量先保存一个数的值,然后再进行交换赋值,最后将临时变量的值赋给另一个变量

void swap(int *x, int *y)
//指针变量交换两个数的值,函数内部要交换两个数的值要通过指针交换
{
	int t = *x;
	*x = *y;
	*y = t;
}

2.异或法

根据将某个数与另一个数连续与或两次,可得到本身。将两个数进行与或运算,再分别与本身做与或运算便可得到另一个数

void swap1(int *x, int *y)
//不创建临时变量,交换两个数的值(异或法):一个数于任何一个数与或两次,得到的数等于本身
{
	*x = *x^*y;
	*y = *x^*y;//(*x^*y)^*y=*x(原值)
	*x = *x^*y;//(*x^*y)^((*x^*y)^*y)=*y(原值)
}

注:该方法相比其他方法不用创建临时变量,切不会出现越界

3.加减法

两个数相加再减去另一个数可得到原来的数;

void swap2(int *x, int *y)
{
	*x = *x + *y;//此处有可能越界
	*y = *x - *y;
	*x = *x - *y;
}

注:*x+y的大小不能确定,有可能超出类型范围;因此该方法正确运行的前提是x+*y不能超出类型范围,类似的方法还有乘除法,不过该方法比加减法更容易越界,因此不再过多介绍。下面给出代码:

void swap(int *p1, int *p2)
{
	*p1 = *p1*(*p2);
	*p2 = *p1 / (*p2);
	*p1 = *p1 / (*p2);
}

你可能感兴趣的:(c语言---基础)