| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1510 人关注过本帖
标题:关于调用函数时使用指针的理解
只看楼主 加入收藏
Soul寂
Rank: 1
等 级:新手上路
帖 子:117
专家分:1
注 册:2008-9-29
结帖率:100%
收藏
 问题点数:0 回复次数:10 
关于调用函数时使用指针的理解
在调用函数的时候,关于指针参考书上有这么一段话:

调用函数的时不会改变实参指针变量的值,但可以改变实参指针变量所指向变量的值

一直没有深刻理解这句话的意思

我是这样想的,比如说 int *p1=&a;
                    int *p2=&b;

如果在调用函数的时候,p1和p2的指向是不会变的,永远指向a和b,但是可以改变a和b的值,而且*p1就是,*p2就是b,如果我们改变了*p1,*p2的值,是不是a和b的值就改变了呢?

大家是怎么理解的呢?   有没有高手能说清楚?
搜索更多相关主题的帖子: 指针 
2008-10-28 21:53
blueboy82006
Rank: 5Rank: 5
来 自:幻想世界
等 级:贵宾
威 望:16
帖 子:1227
专家分:57
注 册:2007-7-23
收藏
得分:0 
不知道你有没有写过那个经典的交换程序:void swap(int *p1,int *p2)
如果写过就应该理解了,如果没写过,建议你写一个...这个有很多种写法的...之前论坛也有发过...

2008-10-28 22:14
youhm
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2006-5-25
收藏
得分:0 
我的理解是

形参是指针变量,实参传入也是传值,相当于一个临时的指针变量,在函数体内改变实参也就是改变这个临时指针变量,和传递其他类型一样,如果形参用引用,那就可以改变实参,当然改变指针指向的变量始终都是一样可以改变。
2008-10-28 22:18
Soul寂
Rank: 1
等 级:新手上路
帖 子:117
专家分:1
注 册:2008-9-29
收藏
得分:0 
回复 2# 的帖子
写过那个函数,我只是想问问大家是怎么理解这句话的,我说的对不对!
2008-10-28 22:29
llx206
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-10-24
收藏
得分:0 
我觉得,a,b的值会发生改变。
因为指针指向的实体,可以通过指针的间访(在指针变量前加*)来读取该空间的值。间访操作所指向的实体既可以读有可以写,写就意味着实体的改变,从而会影响所关联的变量。可以这样想,指针p指向实体a的地址,而间访*p是指向实体的,修改间访*p的值,即改变了实体的值,此时指针p所指向的地址没有改变,而指针间访的实体值已经改变,所以对应的变量a的值应该改变,因为指针p指向实体a的地址。
2008-10-29 23:35
zxwangyun
Rank: 4
来 自:云南
等 级:业余侠客
威 望:1
帖 子:232
专家分:299
注 册:2008-10-17
收藏
得分:0 
我觉得应该这样理解:
函数实参与形参之间的传递,为值传递,一般不会改变实际参数的值;
既然是以指针为参数,传递过去的指针值也就不会改变;
然而,形参在接受到实参传递来的地址值之后,
便可以对其所指向的值进行修改等操作,
这就是lz所说的:“可以改变实参指针变量所指向变量的值”;
当然,形参所指向的地址的值也会发生改变(再次赋值),但
其并不影响原实参的值。
2008-10-30 07:16
asd6791868
Rank: 1
来 自:逆流
等 级:新手上路
帖 子:362
专家分:7
注 册:2008-7-27
收藏
得分:0 
可以交换

─條路 :  ┈片天  ┈個人  ─瞬間:
2008-10-30 08:28
lockhawk
Rank: 1
等 级:新手上路
帖 子:94
专家分:0
注 册:2008-9-17
收藏
得分:0 
觉得6#有理

人生最大痛苦:虽然不明白你们说什么,但还是要听!
2008-10-30 13:21
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
回复 6# 的帖子
恩 有道理
其实就是值传递和引用传递两种方法
指针做参数其实也是值传递的一种特殊形式

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2008-10-30 13:25
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
把指针看成一般变量,这个变量的值是地址.一般改变指针的值的时候只是指针在移动,只有带星号的时候表明是对地址的值修改(定义的时候除外)

学习需要安静。。海盗要重新来过。。
2008-10-30 19:44
快速回复:关于调用函数时使用指针的理解
数据加载中...
 
   



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

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