C语⾔的swap函数(需使⽤指针)
在C语⾔中,我们经常会调⽤函数去将两个值进⾏交换,如果我们使⽤如下函数进⾏交换,形式参数会随着函数的结束⽽被释放,影响不到实际参数的值:
int swap(int a,int b)
{
int t;
t = a;
a = b;
b = t;
return(a,b);
}
即便我们在最后加上了⼀个return,依然⽆法实现两个数的值的交换。运⾏如下代码:
int x,y;
printf("请输⼊两个数字:");
scanf("%d%d",&x,&y);自定义函数怎么用c语言
swap(x,y);
printf("使⽤swap函数交换x与y的值后,得到:%d,%d\n%d,%d\n",x,y,swap(x,y));
结果如下:
请输⼊两个数字:39
使⽤swap函数交换x与y的值后,得到:3,9
3,9
可以看到,实际参数的值并没有被交换,⽽被返回的a和b两个形式参数也照旧是a=3,b=9。
那么,我们要如何来实现两个数字的转换呢?
正确的做法是使⽤指针,交换x和y两个变量的地址:
pSwap(int*a,int*b)
{
int t;//t不能定义为指针,否则就会产⽣”野指针“
t =*a;
*a =*b;
*b = t;
}
运⾏如下代码调⽤以上函数:
int*p,*q;
p =&x;//将x和y的地址分别赋给p和q
q =&y;
pSwap(p,q);//此处是两个地址交换
printf("使⽤pSwap函数交换x与y的值后,得到:%d,%d",x,y);
得到如下结果:
请输⼊两个数字:39
使⽤pSwap函数交换x与y的值后,得到:9,3
总结:
调⽤函数交换两个参数,错误的做法是直接在函数中交换形式参数的值,因为形式参数会在函数结束后 被释放,改变形参的值对实参没有影响。
正确的做法是通过指针,在⾃定义的函数中交换两个变量的地址,这样⼀来,两个变量名所代表的地址中存储的数值也就达成了互换——即达到了改变实参的效果。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。