说到指针,基本上就是在所c++了,但是指针却代表不了c++,毕竟它只是一个变量,一个功能强大的变量而已,更好比一个人,你再强大,你也代表不了地球,没有农民伯伯提供粮食,你也活不下去,所以指针只是c++语言里的一个特色,而c++却是有各种元素构成的一个整体。
对于学的第一门计算机语言就是c++的同学来说,无疑是一种打击,而学到了指针,要想再安然的学下去,那就是用折磨都无法形容的痛苦。好像干巴巴的,脑子里没有一点点模型,那样的学习只有枯燥能形容,得,我这里就不发牢骚了,接下来就给大家一起揭开“指针”这一神秘面纱吧。
有一天,小明去图书馆借一本名字叫“无字天”的书,而这个图书馆是自动化的,什么人都没有,但是又特别大,小明不可能把整个图书馆都翻遍了找到这本书,所以小明首先去“地址登记处”找这本书的地址,到了之后小明喊了一声“无字天”,然后前面一个箱子蹦出一根钥匙,上面写着“二楼202第三个书架第二层第五本:无字天”,然后小明就顺着路去找到了这本书。
上述中书架就相当于内存的一部分,装着钥匙的箱子也是内存的一部分,其实内存并不是一个杂乱的停车场,只要位置就可以随便往里面放各种车,而内存则像一个规范的仓库,大仓库中又分了用来储存不通类型物品的小仓库,内存也分了好几个区来存储不通的数据。所以这里书架和箱子都是内存的一部分。然后那个钥匙就是指针,有了钥匙我们就能找到这本书的位置,从而拿出这本书,书就是我们要的数据。
要是针对变成人员而言,程序员就相当于图书管理员,写了这么一串代码:
int *p=a;
其实就相当于图书管理员在书架(内存)里腾出一个4厘米(4字节)宽的地方要放一本名叫“无字天”(相当于代码中的a)的书,为什么是4个字节呢?因为你定义的是int型的变量,查查表就知道int型的变量就占了4字节嘛!而“p“就相当于那根钥匙,钥匙上写着这本书的地址,然后程序员又写了一句代码:
a=3;
就相当于你在这本书里面写了个3,这本书里面的所有内容也就只有“3”这个数据,然后书架里的这个位置真正有意义的就是这个“3”字了。我们要取出这本书,然后打开看看这个3字,然后程序员写道:
cout<<*p<<endl;
接下来就可以在黑框框里看到3了,但是小明不仅想看到这个3,还想看到这个3的地址,然后程序员又写到:
cout<<p<<endl;
然后就看见了一串奇怪的数字或数字加字母,那就是这个3所在内存的地址!
说白了,指针就是个变量,只不过一般变量直接存储数据,而指针却存储的是这些数据的地址!