| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2784 人关注过本帖, 1 人收藏
标题:指针交换问题
只看楼主 加入收藏
陈威
Rank: 1
等 级:新手上路
帖 子:114
专家分:0
注 册:2009-10-18
结帖率:95%
收藏(1)
已结贴  问题点数:10 回复次数:9 
指针交换问题
#include "stdio.h"
#include "conio.h"
#include "malloc.h"

swap(int *p1,int *p2)
{
  int temp;
  temp=*p1;
  *p1=*p2;
  *p2=temp;
}

main()
{
  int *p1,*p2,a,b;
  scanf("%d,%d",&a,&b);
  p1=&a;
  p2=&b;
  if(a<b)
  swap(p1,p2);            
  printf("%d,%d",a,b);
  getch();
}
运行:
5,9回车
9,5
为什么a,b的值也会互换?
搜索更多相关主题的帖子: 指针 
2009-10-20 07:45
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:0 
对于这一点,书上关于指针这一段专门有讲,毕竟这是C语言的重要特点之一..

建议你认真看看书上关于这一段的描述..
2009-10-20 08:04
jiangwu10057
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:341
专家分:667
注 册:2009-3-25
收藏
得分:0 
这个名字还真像我同学的哈···
2009-10-20 08:13
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:2 
涉及到2点,一是指针,自己去看书;
我讲讲第二点,就是值传递,形参和实参都是指针的形式是值传递,不过传递的是地址(不要以为是地址传递),因为形参实参都是指针变量,指针变量里存放的是地址,so,他们的本质是值传递,但因为类型是地址,所以在形参和实参之间形成了数据共享,就好比,你的名字叫张明,你妈喊你小明,你爸喊你明明,这时候的小明就是形参,明明就是实参,小明笑了,就是明明笑了。在都是张明的情况下,小明和明明共享一个人的。

我可好玩啦...不信你玩玩^_^
2009-10-20 10:04
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:2 
如果ab的值没有互换可就坏了。
a 和b的值发生了互换,是通过指向a和b 的指针变量所指向的内存单元内容互换实现的。
程序的本意就是让ab的值互换,而作为指针变量的p1和p2是没有发生变化的,仅仅是指向的东东变了。
2009-10-20 11:54
梁子
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:83
专家分:191
注 册:2009-9-20
收藏
得分:0 
好好看书吧,呵呵,指针和函数参数传递那一块。很常识的东西了,楼主加油啊。
2009-10-20 12:27
apwh7550
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:41
专家分:106
注 册:2009-10-17
收藏
得分:2 
你的p1,p2是指针类型,指向存储a,b的地址空间;
main()向swap()传递的是a,b的地址(不是传值!),当然a,b的值会交换了!

如果写成swap(a,b)——传值,a,b的值就不会交换了。
当然如果这样swap()也要相应改一下:
swap(int a,int b)
{
//传值方式
  int temp;
  temp=a;
  a=b;
  b=temp;
}
2009-10-20 23:54
yilangcb
Rank: 2
等 级:论坛游民
帖 子:30
专家分:23
注 册:2009-10-15
收藏
得分:2 
这是值传递的问题
  p1=&a;
  p2=&b;
  if(a<b)
  swap(p1,p2)
在运行swap函数时,将a,b的地址进行了交换,自然它们的值也就跟着变了
         
2009-10-21 09:22
thesexhunter
Rank: 1
等 级:新手上路
帖 子:4
专家分:9
注 册:2009-10-20
收藏
得分:2 
1.
   p1=&a;
   p2=&b;
  这两句话说明了p1 p2分别指向a,b
2.swap函数的作用请仔细想清楚:这个函数的作用是把形参p1 p2所指的两个内存空间的内容交换
   也就是a b的内容交换
  但是p1  p2一直指向a b的
 
原来p1--->a  (=5)
      p2--->b  (=9)

现在p1--->a (=9)
      p2--->b (=5)
只是内容互换(p1,p2值没变,但是*p1 *p2的值变了)
2009-10-21 12:33
fgchg911
Rank: 4
等 级:业余侠客
威 望:1
帖 子:131
专家分:204
注 册:2009-9-6
收藏
得分:0 
* 号称“间接访问”,操作的已经是被指向的变量了
2009-10-21 21:46
快速回复:指针交换问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023720 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved