标签:
在c++的学习中,我们经常被应该如何使用指针和引用这个问题所困扰,那么我这里给大家说一下在我的学习过程中对指针和引用的理解,和它们之间的区别,希望各位朋友给出不同的意见并且指出我在学习中的一些错误
首先我们来聊一下指针,相信我们在C的学习中就会遇到这个在C编程中无处不在的朋友。
指针本来就是用来存放地址的一个变量,其中他存放的地址和存放地址中的数据都可以被更改除非你这样(const int * const p = 12) 首先我们定义指针时通常是:
int * p = 12;
可以知道p是一个指针变量,里边存储的是数值12所在内存单元的地址,*的含义即是用于执行间接访问的一个单目运算符,他可以去访问p中的地址从而得到12这个值。
指针传递是一种值传递的方式,他传递出去的只是地址值,值传递的时候中我们可以知道被调函数的形参会被当做一个局部变量来出来,会在栈中去给其分配空间用 来存储主调函数传输过来的值,该值只不过是主调函数中实参值的一个拷贝,所以在被调函数中去修改传输过来的值并不会去影响主调函数中的实参值。
我们可以通过一个程序来看一下
程序运行的结果:
我们可以看到在该程序中调用函数Func时传递的只是一个地址值,x = x + 3并不会去更改掉n 的值他只是在进行n的地址的相加
可是如果要更改n 的值值需要把上面代码中x = x+3;,更改为(*x)= (*x)+3;就可以了
我们再来看一下引用
我们还是从 程序中来看首先我们先定义一个变量
我们可以看到b引用a的值而且我们同时打印了b和a的地址
现在我们看看运行的结果
我们可以看到b引用a之后b的值也为4,同时a和b的地址也是相同的所以我们可以说b引用了a是只是给a空间起了一个外号叫做b
现在我们再来看看如果在程序中运用引用传递的效果
上边应该是#include<iostream>
现在我们来看看运行的结果
我们可以看到 b与n的值是相等的;
现在我们来总结一下
相同点
他们都是和地址有关系的,我们可以看到指针指向一块内存,而引用是一块内存的别名;
不同点
1指针是一个实体他在栈中有自己使用的空间,但是引用没有;
2引用必须初始化,指针不用但是最好初始化
3指针使用时必须加*,引用不用;
4引用只能初始化一次是个专一的人,指针不是;
5引用不用const去修饰,但是指针可以
6指针和地址运用自增(++)不同,引用是值进行自增,而指针是地址进行自增;
联系
1引用的内部使用指针实现的(如何实现这里不做解释)
2引用是受了限制的指针
我对指针和引用的理解只是到了这里,如果有不足之处希望大家批评指正。
标签:
原文地址:http://blog.csdn.net/study__linux/article/details/51352206