C语言如何实现交换两个数?
程序员文章站
2023-08-24 08:25:31
方法一:最普通方法--建立临时变量
思路分析:建立一个临时变量,通过temp=a,a=b,b=temp来实现交换。
缺点:这只是一种假交换,由于这只是在函数内部临时变量间的交换,所以当函数退出,函数...
方法一:最普通方法--建立临时变量
思路分析:建立一个临时变量,通过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; }
上一篇: 如何调理散光 散光应该怎么改善
下一篇: 子宫腺肌症的原因和解决方法