* 原始文章地址可能暂时无法访问,仅展示文章的摘要信息

从本质理解指针的那些知识 | C语言基础」的摘要信息

指针在C语言中是个很重要的概念,我更多从类比并结合计算机硬件的角度开始引入概念。 我也是初学者,指针也确实是个很容易被误解的概念,请多指教,评论区留言误区一般时间1h内会回。 1. 引入指针 1.1 简要理解 在之前的《谈谈printf()和scanf() | C语言基础》文章中,讲到变量的时候说过,变量每次创建同时会在内存中分配其一个空间。 我们从高中时期或者更早就了解过计算机硬件的简单知识,如下导图(=>完整版指路)。 我们知道计算机上CPU(Central Processing Unit 中央处理器)在处理数据的时候,会从内存中读取数据,处理后的数据也会放回内存中。内存中为了高效管理空间,会把内存分为一个个的内存单元,一单元一字节,且每个单元都有自己的既定的地址。 更简单地,可以把内存想象成为一栋按房间编号管理的宿舍楼,然后每个“房间”就容纳一个字节,如果寝室内发生什么事儿,门牌号就是宿管找到你们寝室的地址。 所以类比下,当CPU需要一段数据时候,必须要有个准确的门牌号,否则就无从找到目标。C语言中这个门牌号就叫做“指针”,指针你可以看作地址的另一个叫法。 1.2 拓展:从硬件角度理解 【想了解的可以点此展开】 一般理解到这里就差不多了,不过也许有人觉得这样解释地还是过于简单,那从再从硬件角度来看指针是如何起作用的(博主大一还没学计算机组成之类的课,仅为自主课外拓展和理解)。 当我们写下 int* pa = &a; 并执行时,(假设 a 是前文已经定义过的变量,基础知识回顾:&是取地址操作符,故 &a 即代表 a 变量存储在内存中的地址),编译器会把 pa (指针本身)的数值写入CPU的MAR(寄存器)中。 随后地址总线将这一串二进制位送往内存控制器,内存条内部的译码电路接收到地址后找到确切的内存单元。接着数据总线把地址 &a 存储到MDR,再将其返回寄存器或缓存。 ...