注册 登录
编程论坛 C++教室

关于调用函数时使用指针的理解

Soul寂 发布于 2008-10-28 21:53, 1528 次点击
在调用函数的时候,关于指针参考书上有这么一段话:

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

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

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

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

大家是怎么理解的呢?   有没有高手能说清楚?
10 回复
#2
blueboy820062008-10-28 22:14
不知道你有没有写过那个经典的交换程序:void swap(int *p1,int *p2)
如果写过就应该理解了,如果没写过,建议你写一个...这个有很多种写法的...之前论坛也有发过...
#3
youhm2008-10-28 22:18
我的理解是

形参是指针变量,实参传入也是传值,相当于一个临时的指针变量,在函数体内改变实参也就是改变这个临时指针变量,和传递其他类型一样,如果形参用引用,那就可以改变实参,当然改变指针指向的变量始终都是一样可以改变。
#4
Soul寂2008-10-28 22:29
回复 2# 的帖子
写过那个函数,我只是想问问大家是怎么理解这句话的,我说的对不对!
#5
llx2062008-10-29 23:35
我觉得,a,b的值会发生改变。
因为指针指向的实体,可以通过指针的间访(在指针变量前加*)来读取该空间的值。间访操作所指向的实体既可以读有可以写,写就意味着实体的改变,从而会影响所关联的变量。可以这样想,指针p指向实体a的地址,而间访*p是指向实体的,修改间访*p的值,即改变了实体的值,此时指针p所指向的地址没有改变,而指针间访的实体值已经改变,所以对应的变量a的值应该改变,因为指针p指向实体a的地址。
#6
zxwangyun2008-10-30 07:16
我觉得应该这样理解:
函数实参与形参之间的传递,为值传递,一般不会改变实际参数的值;
既然是以指针为参数,传递过去的指针值也就不会改变;
然而,形参在接受到实参传递来的地址值之后,
便可以对其所指向的值进行修改等操作,
这就是lz所说的:“可以改变实参指针变量所指向变量的值”;
当然,形参所指向的地址的值也会发生改变(再次赋值),但
其并不影响原实参的值。
#7
asd67918682008-10-30 08:28
可以交换
#8
lockhawk2008-10-30 13:21
觉得6#有理
#9
vfdff2008-10-30 13:25
回复 6# 的帖子
恩 有道理
其实就是值传递和引用传递两种方法
指针做参数其实也是值传递的一种特殊形式
#10
sunkaidong2008-10-30 19:44
把指针看成一般变量,这个变量的值是地址.一般改变指针的值的时候只是指针在移动,只有带星号的时候表明是对地址的值修改(定义的时候除外)
#11
wangluxi2008-10-30 20:53
同意楼上的观点
地址传递会改变地址中变量的值,相当于对变量从新赋值
1