c语言是一门比较早的语言,相对于汇编语言可视为高级语言,这是一门伟大的语言,改变了很多软件编写的思路。对比汇编语言更具有直观的阅读性。目前这门语言在国内用得越来越少,只有在涉及底层开发的时候才被使用。不过现在流行的语言的底层都是c/c++编写的。例如:java,node,go等语言。
c语言最比较难懂的是指针。当年上大学学习这门语言的时候关于指针弄了好久,很难理解。最后发现大学的课程安排得不合理才导致难于理解。学习这门语言之前要准备先学习计算机原理,汇编语言。这样才能更好地理解c语言,才能知道指针是什么。
指针就是地址。cpu取值都是通过地址进行取值。数据都是放入内存,cpu进行寻址找到存放的数据。
地址和数据就像是一个盒子里放的物品一样。如果想找到一个物品首先要找到放它的盒子,那此时的盒子就是地址。那指针的指针又是啥呢?就是放盒子的房间。像一个酒店,要是想找到自己的箱子就要去自己住的房间。指针的指针的指针以此类推。
在计算机的世界需要把这些房间,盒子,物品等东西看成一个线性的地址空间。例如房间在0x00000001中,里面的值就是盒子的地址0x00000020,找到这个地址去访问盒子,那盒子的地址里就放入了物品,也就是最终的数据。在32位计算机里地址里存放的都是4字节的数据,寻址空间也是2的32次方,4G空间。现在的计算机都是64位的即8字节。
c语言中的数组就是一个连续的存放数据的空间。malloc分配的都是连续的存储空间,realloc是根据策略进行缩小或者扩大进行申请空间,最坏的情况是重新找到一块新区域把之前的数据拷贝过去。
理解好了计算机的存储与获取原理则就能明白指针的概念。指针最可怕的就是越界访问直接导致程序崩溃。c语言是高效的,但前人为了指针的越界访问也是绞尽脑汁推出各种方案,有的是编码规范,有的是智能指针类,但各种方案都有利弊。我们用了它的便捷性也同时拥有了毁灭性。希望大家慎重使用指针,更好的编写习惯能减少问题的产生,更好的设计方案能更容易的查找问题。
还没有评论,来说两句吧...