变量的值"/>
C语言中如何交换两个变量的值
在C语言中,经常需要交换两个变量的值,那么如何去交换两个变量的值呢?方法其实是很多的。大体分为两个方面,不使用指针改变,和使用指针在自定义函数中改变。
不使用指针
这种情况在交换函数内两个局部变量的值,或者交换两个全局变量的值最为适用。
第一种是最为常用的,用第三个变量存储变量被修改之前的值。
#include <stdio.h>
int main()
{int a=10, b=5, tmp=0;tmp=a;a=b;b=tmp;return 0;
}
第二种就少见了,不需要使用第三个变量。
#include <stdio.h>
int main()
{int a=10, b=5;a=a+b; //这里a的值是a+bb=a-b; //这里b的值是(a+b)-b=aa=a-b; //这里a的值是(a+b)-a=breturn 0;
}
第三种和第二种异曲同工,但是使用了位运算符。
#include <stdio.h>
int main()
{int a=10, b=5;a=a^b; //这里a的值是a^bb=a^b; //这里b的值是(a^b)^b=a^(b^b)=a^0=aa=a^b; //这里a的值是(a^b)^a=b^(a^a)=b^0=breturn 0;
}
使用指针
使用指针都是为了在函数内部访问函数外的局部变量,这里先说两种错误的方法,然后再说两种正确的方法。
第一种,最为常见的错误,没有理解实参和形参的区别。指针变量也是形参,交换形参指针的值,只是交换了形参指针的指向,并没有对其指向的内存做修改。
void swap1(int *pa,int *pb)
{int *pt;pt = pa;pa = pb;pb = pt;
}
第二种,避开了没有对内存做修改的错误,但是在运行过程中几乎都会报错。
void swap2(int *pa,int *pb)
{int *pt; //这里定义一个pt指针,//想用它指向的内存去存储变量修改前的值,//但是对于一个没有初始化的指针(指针变量的值是随机的,即野指针),//去访问它指向的内存是相当危险的,//我们无法知道它指向的内存是否有权限去访问,//以及访问过后是否会使程序崩溃,所以绝大多数情况下会出错。*pt = *pa;*pa = *pb;*pb = *pt;
}
第三种是正确的方法,也是最常用的。
void swap3(int *pa,int *pb)
{int t = 0;t = *pa;*pa = *pb;*pb = t;
}
第四种是正确的方法,是使用前面所说的位运算的方法,你也可以使用加法的方法。
void swap4(int *pa,int *pb)
{*pa ^= *pb;*pb ^= *pa;*pa ^= *Pb;
}
写的可能不够好哈(- _ -)
更多推荐
C语言中如何交换两个变量的值
发布评论