C语言中的变量可用来存放数据。例如有定义int a;则a是一个int型的变量,a中可以存放int型的数据,如可以写a=5;即将数据5存放在变量a中。但是读者可以考虑,a仅仅是我们定义的一个标识符,是一个符号,这样的一个符号中怎样存放数据5呢?实质上变量a对应的是内存中的一个存储单元,该存储单元是在编译时由系统分配给变量a的。如执行以下语句:
其中第一行输出的是变量a的值,第二行输出的是变量a所占内存字节个数(sizeof可以直接计算某一类型的单元所占字节数),第三行和第四行分别以十六进制和十进制的形式输出了a的地址。由此可知,系统在编译时给我们分配了一个整型存储单元,该存储单元名字为a,地址为0012FF7C,其中存放的值为5,在内存中占用了四个字节(其地址分别为:0012FF7C、0012FF7D、0012FF7E、0012FF7F),其关系如图7-1所示。
从图7-1可以看出,a是一个存储单元的名字,我们可以利用a这个名字直接访问其所对应的内存单元,这种通过变量名直接使用其所对应内存单元的方法称为直接内存访问。这种使用方法符合人们“按名引用”的使用习惯,也是编程语言中最常用的内存引用方法。比如我们称呼一个人的时候,一般会直接喊他的名字,而不会去喊他的身份证编号。
一个存储单元的地址也唯一地标识了一个内存单元,或者说内存地址带有指向性,一个地址指向唯一的内存单元,因此在C语言中,给内存地址起了一个更加形象的名字——指针。(www.xing528.com)
简单地讲,一个存储单元的内存地址就叫作该单元的指针。
如前所述,CPU就是通过内存地址访问相对应的内存单元。变量的名称只是对于程序员有意义,对CPU来讲,使用名称引用内存是不现实的,因为它不具备人的智能。因此在程序编译过程中,名字最终会被编译器转换为内存地址。我们可以想象,既然CPU可以通过内存地址访问内存,那么如果程序员知道了一个数据在内存中的地址,是否也可以像CPU那样来使用该地址所对应的内存单元呢?答案是肯定的,这种通过内存地址来引用其所对应内存单元的方法称为间接内存引用。
请注意,通过地址间接引用内存是使用指针的核心,也是引入指针这一概念的基本目的。在后续章节的学习中,请大家把握这一思想去理解项目内容,相信对指针的理解和掌握会有很大的帮助。
图7-1 内存和地址
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。