概述
指针可以作为参数传递直接修改所指的变量的值,如下代码:
void change(int *p){
*p = 20;
}
int main(){
int a = 10 ;
int * pa = &a;
change(pa);
cout<<"a = "<<a<<endl;//输出20
cout<<"*pa = "<<*pa<<endl;//输出20
}
指针传递实际上也是值传递,传递的值便是指针的地址,执行* p = 20后,虽然传递的是一个地址的副本,但是副本的值就是变量的地址,执行后,所指向的地址的值变成了20,达到了修改变量值的目的。所以,当需要修改指针所指向的对象时,这种传递方式就有问题了,因为修改的是指针的副本,所以原本指针所指向的对象并没有发生改变,这个效果就像普通的swap函数一样,如下代码:
int m = 30;
void change(int *p){
p = &m; //期望的是修改p指向m,即期望修改指针的值,但实际上只是副本指向了m
}
int main(){
int a = 10 ;
int * pa = &a;
change(pa);
cout<<"a = "<<a<<endl;//输出10
cout<<"*pa = "<<*pa<<endl;//输出10,并没有修改成功。
}
如果代码改为如下:
int m = 30;
void change(int *&p){ //指针的引用
p = &m; //期望的是修改p指向m,但实际上只是副本指向了m
}
int main(){
int a = 10 ;
int * pa = &a;
change(pa);
cout<<"a = "<<a<<endl;//输出10
cout<<"*pa = "<<*pa<<endl;//输出30。修改成功。
}
重点:理解其中的关键就是所要修改的是指针的值还是指针所指向的值。
最后
以上就是外向白羊为你收集整理的C++指针的引用理解的全部内容,希望文章能够帮你解决C++指针的引用理解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复