指针
指针的本质
首变量的值存储于计算机的内存中,每个变量都占据着一个特定的位置。每个内存位置都由地址唯一确定并引用,就像是一条街道上的房子由他们的门牌号码标识一样。指针只是地址的另一个名字罢了。指针变量就是一个其值为另外一个内存地址的变量。
首先必须要非常明确的是:指针的实质就是个变量,它跟普通变量没有任何区别。指针完整的名字应该叫做指针变量,简称为指针。
指针的出现是为了实现间接访问,在汇编中都有间接访问,其实就是CPU寻址方式中的间接寻址。间接访问(CPU的间接访问)是CPU设计时决定的,这个决定了汇编语言必须能够实现间接寻址,又决定了汇编之上的C语言也必须实现间接寻址。
间接寻址:意思就是不是通过一个立即数直接找到具体的数据,而是这个数据的地址被放在了一个寄存器中,我们先访问寄存器得到数据的地址,然后在通过得到的地址去访问所需要的数据。这里的寄存器在C语言中表现为指针变量,寄存器中的地址在C语言中表现为目标数据的地址,然后通过解引用指针变量中的地址来访问目标数据。原来C语言实现指针的机制后面是有硬件作为基础的,这才是本质。这也是我第一次注意到这个问题,虽然之前也学习过了但是并没有在CPU设计层次上来理解C语言。
高级语言中C#,JAVA等没有指针,也可以实现,原因是语言本身帮我们封装了。