一道指针变量作函数参数的问题

玄太鹤 2009-11-26 01:58:52
swap( int* p1,int* p2 )
{
 int temp;
 temp = *p1;
 *p1 = *p2;
 *p2 = temp;
}

main()

{

int a,b;

int *pointer_1,*pointer_2;

scanf("%d,%d",&a,&b);

pointer_1=*a;pointer_2=&b;

if(a<b)swap(pointer_1,pointer_2);

printf("\n%d,%d\n",a,b);

}

这是谭浩强那本书上的例子,里面有句话是函数调用结束后,p1和p2不复存在(已释放),那么我想问一下为什么a,b的值还能改变呢?a,b的值是在执行swap函数时候交换的,书上也只说实参和形参是值传递并且单向传递那么我为什么a,b的值还能改变并且用到主函数里使a和b的值改变?

能说的详细点吗?或者是举个形象的例子。谢谢!~~
...全文
91 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
like6891 2009-12-16
  • 打赏
  • 举报
回复
运行下就知道是改变了.因为用到了指针,书上讲得很清楚,
对比下:
swap( int x,int y )
{
 int temp;
 temp = x;
 x = y;
 y = temp;
}

如果调用此函数,实参不变
chenzhuolin1002 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 macrojj 的回复:]
因为 swap( int* p1,int* p2 )
{
 int temp;
 temp = *p1;
 *p1 = *p2;
 *p2 = temp;
}
中p1 p2是指针借由指针的帮助,我们能访问到真正的 内容 而不是临时变量。
相当于房子里面的东西给调换了。但是房子还是那个房子,懂了吗
[/Quote]
嗯嗯 就是这样
sixbusy 2009-11-30
  • 打赏
  • 举报
回复
我觉得什么都是值传递。看你传的是的什么了!
swap(int a,int b) swap(m,n)是m,n的值
swap(int *a,int *b) swap(&m,&n)是m,n地址的值
获得了地址以后,在地址里面找到变量本身,所以交换了!
yeqin1314 2009-11-26
  • 打赏
  • 举报
回复
按址传递和按值传递。按址传递修改的不是本身的值
macrojj 2009-11-26
  • 打赏
  • 举报
回复
因为 swap( int* p1,int* p2 )
{
 int temp;
 temp = *p1;
 *p1 = *p2;
 *p2 = temp;
}
中p1 p2是指针借由指针的帮助,我们能访问到真正的 内容 而不是临时变量。
相当于房子里面的东西给调换了。但是房子还是那个房子,懂了吗
guzhijie1981 2009-11-26
  • 打赏
  • 举报
回复
看我的http://topic.csdn.net/u/20091116/09/69d3fb65-62c7-4e99-8bd2-a0bdf538cda7.html
关于函数传值那部分
wbgxx 2009-11-26
  • 打赏
  • 举报
回复
这样的话仅仅是值的拷贝
用传递指针和引用的办法何以解决这样的问题
wbgxx 2009-11-26
  • 打赏
  • 举报
回复
mark

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧