首页 > 编程知识 正文

用指针写swap函数,c中swap函数

时间:2023-05-04 07:15:54 阅读:222492 作者:2055

在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);swap(x,y);printf("使用swap函数交换x与y的值后,得到:%d,%dn%d,%dn",x,y,swap(x,y));

结果如下:

请输入两个数字:3 9使用swap函数交换x与y的值后,得到:3,93,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和qq = &y;pSwap(p,q);//此处是两个地址交换 printf("使用pSwap函数交换x与y的值后,得到:%d,%d",x,y);

得到如下结果:

请输入两个数字:3 9使用pSwap函数交换x与y的值后,得到:9,3 总结:
调用函数交换两个参数,错误的做法是直接在函数中交换形式参数的值,因为形式参数会在函数结束后 被释放,改变形参的值对实参没有影响。

正确的做法是通过指针,在自定义的函数中交换两个变量的地址,这样一来,两个变量名所代表的地址中存储的数值也就达成了互换——即达到了改变实参的效果。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。