5.2 C51的指针
变量在计算机或单片机内占有一块存储区域,变量的值就放在这块区域内。在C51程序中,可以通过两种方式来实现访问或修改变量。一是直接访问或修改这块区域的内容来修改变量的值;另一种是先求出变量的地址,然后通过地址再对变量进行访问。所谓指针就是地址,变量的指针就是变量的地址。指针变量是一种新的数据类型,利用指针变量可以对各种数据类型的变量进行操作。不仅如此,指针变量还具有汇编语言能够处理单片机内存地址的能力,这一点应用非常广泛。C51语言中使用的指针概念是从C语言中沿用下来的,下面就详细介绍指针的相关内容。
5.2.1 指针及相关概念
要掌握指针的用法,首先要理解并区分很容易混淆的与指针相关的几个概念,即地址、指针和指针变量。若未能理清这些概念,以后在程序中使用指针时,将会因为概念不清而使程序发生错误。
1.地址
“地址”是C51中常用的名词。所谓地址,即变量在单片机(或计算机)内所占的存储器的区域。系统将存储器区域划分成若干个存储单元。内存单元是单片机存储器中的最小存储单位,一般一个字节称为一个内存单元。为了便于对地址进行操作,系统将单片机的内存单元进行了编号,该编号即为该内存单元的地址。通过该内存单元的地址,即其编号,就可准确地找到该内存单元,并对其中存放的数据进行操作。
2.指针
单片机中的数据都是存放在存储器中的,不同类型的数据所占用的内存单元大小和其数据类型有关。在C51语言中,由于变量所属的数据类型或数据结构的不同,其所占有内存单元大小也不同。一个变量常常要占用一组连续的内存单元,因此用“地址”这个概念有时并不能清楚地描述这个变量的存储情况,为了解决这一问题,从而引进了“指针”的概念。指针本质上也是一个地址,用来表示一个变量在内存中存放的首地址。因为指针是指向一个数据结构的首地址,因而寻址更加明确,操作更加简便。
3.指针变量
指针变量即指针型变量,是用来存放指针的一种变量类型。在C51语言中,一个指针变量的值就是某个内存单元的地址。在C51程序中定义指针的目的,是为了通过指针去访问内存单元。
通过指针变量除了可以访问变量的地址外,还可以访问其他数据结构的地址,如数组、函数等的首地址。在C51程序中,数组和函数都是连续存放的。因此,通过访问指针变量取得了数组或函数的首地址,也就找到了该数组或函数。因此在程序中出现数组和函数的地方,用指针变量来表示并进行操作,就可以使程序精练、执行效率提高。
说明指针变量与变量的指针是不同的概念,其中指针变量是存放指针的变量,而变量的指针是指变量在内存中的首地址,在程序设计时要注意这两者的区别。