通过上一篇博文,我们已经对指针有了一定的认识,在接下来的这一篇博文中,我们将进一步了解指针的精髓,包括指针的实质以及一些特殊的指针,同时还会涉及到一些C语言其他的语言特性。
一:指针的实质
指针作为C语言的精髓关键在于“指”,那这个“指”到底是什么?C99中曾给出了指针的明确定义,归纳起来有十分重要的两点:1. 指针是一种引用类型 2.指针本身的类型取决于它所引用的数据类型。怎么理解呢?如果想要完全理解这两点,那就说来话长了,甚至涉及到一些计算机的硬件结构,比如堆内存和栈内存,这有违本文主旨,其次这些我也不熟,姑且就不在此大谈特谈误人子弟了。长话短说,在计算机中,每一个内存单元都是编址的,所以每一个内存单元理所应当的有一个独一无二的地址编号,这个地址不过是个无符号整数,当计算机对内存进行写入或读取时就需要靠这个整数来寻址。在C语言中,我们对这个用整数进行编号的地址进行了适当抽象,并赋予了一个名字,即为指针,这也就不难理解上一篇博文中为什么我们打印出来的指针为什么是一个无符号整数了,所有指针本身的值构成了一个集合,这个集合就是在当前系统进行寻址时的寻址范围。简单说来就是:指针本身是一个变量,只不过这个变量存放的内容是计算机中的数据的地址,我们通常把指针理解为“指向”其他变量的一种特殊数据类型。前段时间看到有关指针引发的争论:指针究竟是地址还是引用?双方各执一词,似乎都有道理,其实这两者并不矛盾。
回到C99中的那两点,如果我们向一个内存单元中存入了一个int类型的数据,那么