用函数实现交换两个整数的三种方法
用函数实现交换两个数的三种方法
我们假设两个数分别为x=10,y=20。 通过swap函数完成两个数的交换。
主函数
int main(){ int x = 10; int y = 20; swap(&x,&y); printf("%d ,%d ",x,y); return 0; }
方法一
void Swap(int *xp,int *yp) { //*xp,*yp解引用 int temp = *xp;//*xp此时为右值,使用的是内容 *xp = *yp;//*xp此时为左值,使用的是空间 *yp = temp; }
方法二
//加减法 void Swap(int *xp,int *yp){ *xp = *xp + *yp; *yp = *xp - *yp; *xp = *xp - *yp; } //此方法在两数字较大时,会产生溢出问题
方法三
我们首先需要知到:如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。任何数和0异或为它本身。(是将数字转为二进制,按照比特位进行相异为1,相同为0)
//利用异或进行交换 void Swap(int *xp,int *yp){ //等价于a=10,b=20 *xp ^= *yp;//等价于a^=b,则a=10^20,b=20 *yp ^= *xp;//等价于b^=a,则a=10^20,b=20^10^20=10 *xp ^= *yp;//等价于a^=b,则a=10^20^10=20,b=10 } //
推荐使用方法一和方法三。