| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2339 人关注过本帖
标题:C++指针及实参形参传递问题
只看楼主 加入收藏
cm61551187
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-7-30
结帖率:0
收藏
已结贴  问题点数:10 回复次数:5 
C++指针及实参形参传递问题
#include <stdio.h>
void main()
{ int a, b, *pa, *pb;
 void swap (int *p,int *p2);
 pa=&a;
 pb=&b;
scanf("%d%d",&a,&b);
swap(pa,pb);
printf("\n main0:a=%d,b=%d \n",a,b);
printf("\n main1:*pa=%d,*pb=%d\n",*pa,*pb);
}
void swap(int * p1,int *p2)
{ int *p;
 p=p1;
p1=p2;
p2=p;
printf("\nswap:*p1=%d,*p2=%d\n",*p1,*p2);
}
输入:12 22
输出:swap:*p1=22,*p2=12
      main0:a=12,b=22
      main1:*pa=12,*pb=22
当把后面的swap函数换成:
void swap(int * p1,int *p2)
{ int p;
 p=*p1;
*p1=*p2;
*p2=p;
}
时输出
a=22,b=12
实在有点看不明白这个指针的过程,求大家指点,为什么第一个换了,第二个没有换过来,说细一点,谢谢



搜索更多相关主题的帖子: include 
2011-08-02 15:48
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:3 
是第二个换了吧  第一个没换  第一个函数调用相对于主函数来说

没有任何作用  你所看到的交换其实在子函数内部的交换

也可以说是实参副本的交换   第二个才是真正的指针交换  

                                         
===========深入<----------------->浅出============
2011-08-02 16:00
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:3 
程序代码:
void swap(int * p1,int *p2)
{ int *p;
p=p1;
p1=p2;
p2=p;
printf("\nswap:*p1=%d,*p2=%d\n",*p1,*p2);
}

这个函数只会交换函数 swap 的两个形参 p1 和 p2 的值。函数返回后 p1 和 p2 即被释放,如 2 楼所说,对调用他的函数没有任何影响

程序代码:
void swap(int * p1,int *p2)
{ int p;
p=*p1;
*p1=*p2;
*p2=p;
}

这个函数会交换 swap 的两个形参 p1 和 p2 所指向的内存空间的值,在函数返回后,p1 和 p2 所指向的内存空间的值已经被交换了。
2011-08-02 18:58
cm61551187
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-7-30
收藏
得分:0 
不好意思,能不能再解释得详细一点啊!对指针实在有点难理解。
2011-08-04 18:55
ybjkl
Rank: 2
等 级:论坛游民
帖 子:86
专家分:85
注 册:2011-6-21
收藏
得分:3 
   谭浩强的书上解释是:不能通过改变指针形参的值而使指针实参的值得到改变,c语言中实参变量和形参变量之间的数据传递是单向的“值传递”方式。指针变量做函数参数也要遵循这一规则。调用函数不可能改变实参指针的值,但可以改变实参指针变量所指变量的值。
   
2011-08-07 17:13
ybjkl
Rank: 2
等 级:论坛游民
帖 子:86
专家分:85
注 册:2011-6-21
收藏
得分:0 
void swap(int * p1,int *p2)
{ int *p;
p=p1;
p1=p2;
p2=p;
printf("\nswap:*p1=%d,*p2=%d\n",*p1,*p2);
}
关于这个函数,不行的原因我觉得是,形参p1,p2不能将地址传回给实参pa,pb
所以也就没有交换了,这个就是单向值传递的意思吧。
void swap(int * p1,int *p2)
{ int p;
p=*p1;
*p1=*p2;
*p2=p;
}
这个之所以行是因为这里面没有要求把地址变量传回去吧。调用函数后p1,pa都指向变量a,
p2,pb都指向变量b,执行函数体后a,b的值互换。函数调用结束后p1,p2不复存在(已经释放)

2011-08-07 17:46
快速回复:C++指针及实参形参传递问题
数据加载中...
 
   



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

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