| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 520 人关注过本帖
标题:指针问题求助!
只看楼主 加入收藏
yang0401
Rank: 2
等 级:论坛游民
帖 子:84
专家分:57
注 册:2011-5-23
结帖率:69.23%
收藏
已结贴  问题点数:2 回复次数:7 
指针问题求助!
void insert(list* &p)



为什么函数参数里面有了&,就能改变指针p的值。
p是list*,&p是list**了啊。但是形参是list*。系统为什么没有报错哟?
搜索更多相关主题的帖子: void insert 
2011-09-28 21:09
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:0 
传值与传地址调用的区别

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2011-09-28 21:58
yang0401
Rank: 2
等 级:论坛游民
帖 子:84
专家分:57
注 册:2011-5-23
收藏
得分:0 
传递地址,但是p的地址是list**啊形参却是list*
2011-09-28 22:15
czsbc
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:469
专家分:1700
注 册:2008-12-13
收藏
得分:0 
引用形参
2011-09-28 22:21
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
收藏
得分:0 
回复 楼主 yang0401
代码不全,不于解释

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2011-09-29 06:49
yang0401
Rank: 2
等 级:论坛游民
帖 子:84
专家分:57
注 册:2011-5-23
收藏
得分:0 
按中序递归建立二叉树函数。
2011-09-29 08:18
silent_world
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:258
专家分:1138
注 册:2011-9-24
收藏
得分:0 
回复 楼主 yang0401
要了解这个问题,你需要弄明白两个方面:
1、指针是什么?
2、函数调用过程中参数的堆栈操作。

以你提出的问题为例:
void insert(list* &p)



为什么函数参数里面有了&,就能改变指针p的值。

在调用前,需要申请一个变量作为参数:
list* cur_p;
假设 cur_p 指向地址 0x00379c;
如果参数中没有&,
void insert(list* p)

     p = 0x003798;

你传入的参数为cur_p,也就是0x00379c,形参为p;
在函数调用过程中,形参进栈,也就是栈内地数据为0x00379c,当你修改形参的值,即堆栈中的p值为0x003798;当函数结束时,参数出栈,实参cur_p的值不会有什么变化。
通俗地说,这个操作只是函数堆栈的操作,和实参八辈子没有关系。

如果参数中有&,
void insert(list* &p)

     *p = 0x003798;

你传入的是参数cur_p的地址,假设存放cur_p的空间为0x002634,即空间0x002634存放的值为0x00379c,而0x00379c又是某个list的地址。
形参的进栈出栈同上,但是中间操作时,不是把堆栈中的值改为0x003798,注意那个*号,而是把堆栈中存放值0x002634空间中的数0x00379c改为0x003798。
这是在内存空间中的修改,即使函数结束,形参出栈,内存中的值已经修改成功。

也就是你说的能修改指针P的值。

有什么不清楚的地方,可以继续提问。



[ 本帖最后由 silent_world 于 2011-9-29 18:22 编辑 ]
2011-09-29 18:17
q409751140
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-9-29
收藏
得分:0 
新手飘过
2011-09-29 20:48
快速回复:指针问题求助!
数据加载中...
 
   



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

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