您的位置:首页 > 其它

数据类型之二指针

2016-02-11 20:14 281 查看
废话在上一篇已经说了很多啦,这次少说几句! 还有如果要深入的理解数据结构的一些具体实现最好是看C版本的或者是伪C的也行,废话不多说开始今天的学习吧。

哦,对了!这次我们要依靠一些图片才行!



首先说以下,CPU只跟内存条交互,别人完全不理的。从CPU到内存条总共有三条线,地址线,控制线,数据线如图。指针地址一共32条,所以CPU只能支持2的32次方也就是4G得内存,多的。。。臣妾做不到啊!。。。啊!。。。。啊!

那么以前可能有人听说过堆栈,你写的A a  = new A;a就是栈里的new的A是在堆里的,其实这个理解起来比较好理解,实际状况是。。。只是算法不一样而已!什么意思呢。内存这东西才不分堆啊栈啊的空间。。。只是存储的算法不一样而已!只是存储的算法不一样而已!(重要的事情说三遍)。实际上并没有堆栈的内存空间。 后面会说到,实际上堆栈就是链表跟树。但是我依然觉得用这种方法记忆挺好的。
可以记成一块一块的,但是脑袋里要有一块块分开的空间但地址是顺序的内存条。

接下来就是我们今天的主角之一:指针。这东西难倒了不少的人,且听我慢慢分析保证你能搞定他!

拿A a  = new A;举例,这条东西执行完就会有一个a这个东西在栈里面,一个对象(结构体)A恩。。。。。在堆里面(先这么理解吧

)。那么不管是A还是a他们都是有地址的。就跟他们的小尾巴一样:就跟后面有个小尾巴一样。小尾巴后面钓一个东西那么a目前来看屁股后面指的是堆内存里的A的地址,的地址,的地址(重说三)。那堆内存里的A里面放得是啥。
当然是A得实体类里面有什么他就有什么咯。那么问题来了, 他能存储一个地址么?? 当然可以,地址不过是一串16进制的数而已,为啥不行,比如说int a;

他里面必须能存一个地址了。。那么a这个东西是什么呢?他叫指针变量,或者干脆叫变量。他也是有限制的。4个字节足够放一个名字了。。。。。除非他叫“巴布罗·迪戈·何塞·法兰西斯科·狄·保拉·胡安·纳波穆西诺·玛莉亚·狄·洛斯·雷梅迪奥斯·西普里亚诺·狄·拉·圣地西玛·特里尼达·路易斯.毕加索”(致敬毕加索)

好!接下来是关键啦!大家仔细想,如果int a = 10; int b;那么吧a指向10的地址赋给b 请问:a跟b指向的是不是同一个对象?。。。肯定是得啦。

如果吧a屁股(小尾巴钓的东西就是10的内存空间)赋给了b。。那a跟b都掌握了同一条尾巴(内存地址),那这样如果对b指向的内存地址进行操作  a指向的10肯定会发生变化。。。。这玩应就叫指针。。。

结论指针是什么??? 指针就是屁股,就是尾巴,就是内存地址。。。。。。。。。指针变量是什么,就是int a;的a 就是个名称(变量名)。

所以你如果没给变量赋值就不能用。。为什么?  因为他没有指向任何东西的地址,也就没有任何的存在意义。那就是著名的产物:垃圾!(所以千万要记得赋值哪怕是空)

明天讲表、栈、队列

有问题希望大家指正
          by     Areay
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: