C语言各类数值交换函数优缺点分析——学习笔记

方法一

利用临时变量来交换

void swap(int *x1,int *x2){
     int temp=*x1;
     *x2=*x1;
     *x1=temp;
}

优点:稳妥

缺点:用了临时变量,占用了空间

方法二

利用加法(或减法)来交换,也可以用乘法来实现,但是除法不行(除法可能会产生小数,小数转整型会导致数值丢失)

void swap(int *x1,int *x2){
     *x1=*x1+*x2;
     *x2=*x1-*x2;
     *x1=*x1-*x2;
}

优点:不用额外空间

缺点:1、会有数值过大造成溢出的风险

           2、当x1,x2指向同一内存空间时,返回的 *x1==*x2==0(可以推导下为什么)

方法三

利用位运算(异或^)来交换

void swap(int *x1,int *x2){
     *x1=*x1^*x2;
     *x2=*x1^*x2;
     *x1=*x1^*x2;
}

优点:位运算计算效率高,数值不会溢出,也不占用额外空间

缺点:当x1于x2指向同一内存空间时,返回的 *x1==*x2==0

总结

三种方法一比较,就知道还是方法一最好了,稳妥点没毛病。方法二的问题较多,不建议使用。方法三虽然挺好,但要先判断x1是否等于x2。

PS

可能有人和我一样看着指针*就觉得难受,那么用引用&来做就没有问题了:

void swap(int &x1,int &x2){
     int temp=x1;
     x1=x2;
     x2=temp;
}

猜你喜欢

转载自blog.csdn.net/jjwwwww/article/details/82085252
今日推荐