从内存的角度解析C语言中的指针
2021-01-18张天友
张天友
(无锡科技职业学院智能制造学院,无锡214000)
0 引言
C语言语法简洁、运算符丰富、编程灵活、可移植性高,是一门重要的计算机语言。在C语言中,通过指针可以实现硬件的访问、动态分配和收回内存、减少全局变量的使用、实现函数的回调功能等,被称为C语言的“灵魂”;但是指针概念抽象,难以把握,使用不当会导致程序退出和内存泄露,甚至系统崩溃,成为学习C语言的难点。
在C Primer Plus[1]一书中,将指针定义为一种变量,其值为内存地址(Basically,a pointer is a variable,(or more generally,a data object),whose value is a memory address)。通过这个定义,理解指针的前提是,理解变量和变量值,内存和内存地址。Data object is a general term for a region of data storage that can be used to hold values.The C standard uses just the term object for this concept.One way to identify an object is by using the name of a variable。数据对象指的是内存的一部分,在C语言标准中称为对象,定位该对象的方法之一是通过变量名。在A Reference Manual[2]中,指针被定义为,指向类型的对象,指针本身也是一种对象,该对象的值为内存的地址(For any type T,a pointer type“pointer to T”may be formed.A value of pointer type is the address of an object or function of type T.)类型的定义:A type is a set of value and a set of operations on those values。类型是一个数值集合以及对这个数值集合的操作。指针在The C Programming Language[3]一种中的定义为:指针是一种变量,该变量的值时其他变量的内存地址。(A pointer is a variable that contains the address of a vari⁃able.)Variables and constants are the basic data objects manipulated in a program。变量和常量是程序处理的两种基本对象。A data object is a named region of storage.一个对象是一个命名的存储区域。
分析上述C语言领域经典资料对指针及其指针相关概念的定义可知,内存是把握和理解“指针”概念的核心所在。在阎石教授所著的《数字电子技术基础》中[4],把内存定义为:一种能够存储大量二值信息(或称为数据)的器件[5]。本文利用开关的“闭”“开”两种状态,来表示存储器中的“二值信息”。利用64个“开关”,构建了可论述的内存模型。以此为基础介绍了C语言中变量、类型、指针等概念的核心特点。……
