首页 > 其他 > 详细

关于swap函数传值的问题

时间:2016-12-28 01:31:36      阅读:228      评论:0      收藏:0      [点我收藏+]
#include <stdio.h>
void swap(int * p3,int * p4);
int main()
{
 int a = 9;
 int b = 8;
 int * p1 = &a;
 int * p2 = &b;
  
 printf("%x %x\n",p1,p2);
 swap(p1,p2);
  
 printf("%d %d\n",a,b);
 printf("%d %d\n",*p1,*p2);
  
 printf("%x %x\n",p1,p2); 
  
 return 0;
}
void swap(int * p3,int * p4)
{
 int * t;
 t = p3;
 p3 = p4;
 p4 = t;
}

初学c的指针类型时,一定都会写这样一个程序,就是利用函数交换两个值。

上面的代码也是很容易想到的,但是这段代码的结果是错误的!!!原因是一个函数是不能有多个返回值的!!

如果有多个值要返回时,就要使用向上通信(即实参为变量的地址)的方法。

在单步调试的过程中,我们也能看到前后两次的地址是没有发生变化的。

如果你用单步调试,你可以看到的是p3和p4的值的确发生了变化,也就是说p3和p4指向的内存的确交换了,但是这种交换却没有影响到p1和p2,p1和p2指向的内存是没有发生变化的。

也就相当于swap函数只是做了p3和p4中存放的地址的值交换。

ps:在对地址(指针)直接进行操作的时候,可以把int * 看作是一个整体int,那么在对p3,p4的变化就相当于是对两个int型变量的变化,被调用函数中int型变量的变化如果不用返回值当然不能带回主函数,但如果使用返回值,却不能带回两个值,所以要使用指针类型。

关于swap函数传值的问题

原文:http://www.cnblogs.com/hml-xxbj/p/6227907.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!