“歪谈”指针

来源:互联网 发布:怎么在淘宝上开个网店 编辑:程序博客网 时间:2024/06/18 06:31

       在刚开始学习编程语言的时候,我们经常会被指针搞得一头雾水,不仅初学者搞不清楚,有些学习了很多年的人也不一定能弄得很明白。笔者也不例外,刚开始接触编程,对于指针的使用是能省则省,必须要用的时候也是乱用一气,在重读《C++ Primer Plus》的过程中,对于指针这一概念有了新的认识,今次笔者将自己的认识做一个简单的总结,方便自己在学习之路上走的更加扎实。
       一个最基本的概念就是,指针是一种变量,其存储的是值得地址,而不是值本身。所以这样来看,不管指针的使用多么复杂,只要将指针看做是一种“地址数据类型”即可。不论是什么类型的数据,在计算机中,永远是用0和1来表示,为了方便管理,计算机中的内存块被划分并标记相应的地址,地址的表示在计算机上的格式是固定的,所以指针所占的内存大小也是固定的。
       指针中存放的是记录值信息的地址,可以用“&”符号来获取地址,或者使用new运算符获取。地址的大小格式都相同,那么编译器如何处理该地址所在的内存块中的数据呢?这要求在声明指针的时候指定指针的类型,这样一来编译器才能正确的处理该数据。
       那么编译器是如何处理这些地址所在内存块中的数据的呢?笔者自己的理解是,在指定指针的类型后,编译器根据指定的类型,以指针存放的地址为开始地址,取出相应类型大小的内存块,按其类型来进行相关的操作。不管指定的类型是基本的数据类型还是复合类型,或是其余高级数据结构类型,通过地址和类型即可实现方便快捷的操作。
       很多时候会用new来返回一个地址,new得到的内存块需要使用delete来释放,而指针使用过程中遇到的大多数问题都与其存放地址所在的内存块是否存在或者释放有关。抛开专业的术语,内存出问题其实只有两种,使用前后的问题,使用过程中的问题。如何避免问题其实在笔者看来就是多留心,如果一味的利用编译器或者编程语言的进步不如自己去把这些问题解决好,最基本的东西使用起来虽然麻烦,但却高效安全。


       关于指针的用法和其他内容,书本上写的较为完善,笔者也就不做搬运工了。

0 0