指针的概念

<- 返回指针讲解目录页

说明

在Arduino中,数据是存放在内存中的,一般把内存中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不一样,int占用2个字节,char占用1个字节。为了正确地访问这些内存单元,必须为每个内存单元编上号。每个内存单元的编号是唯一的,根据编号可以准确地找到该内存单元。

内存单元的编号叫做地址(Address),也称为指针(Pointer)。

内存单元的指针和内存单元的内容是两个不同的概念。 可以用一个通俗的例子来说明它们之间的关系。我们用银行卡到ATM机取款时,系统会根据我们的卡号去查找账户信息(包括存取款记录、余额等)。当信息正确且余额足够的情况下ATM才允许我们取款。这里的卡号就是账户信息的指针。 存取款记录、余额等就是账户信息的内容。对于一个内存单元来说,单元的地址(编号)即为指针,其中存放的数据才是该单元的内容。

在C语言中,允许用一个变量来存放指针,这种变量称为指针变量因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。

设有字符变量c,其内容为 ‘K’(其ASCII码是十进制数 75),c占用了011A号内存单元(地址通常用十六进数表示)。同时,假设有指针变量p,内容为011A,这种情况我们称指针变量p指向字符变量c,或说变量p是指向变量c的指针。

pointer
严格地说,一个指针只是一个地址值常量。然而一个指针变量却可以被赋予不同的指针地址值,是变量。人们经常把指针变量简称为指针。为了避免混淆,在本网站中,“指针”是指地址值常量。“指针变量”是指取值为地址值的变量。我们将地址值赋给指针变量的目的是为了通过指针访问内存单元。

既然指针变量的值是一个内存单元的地址,那么这个地址不仅可以是变量的地址,也可以是其它数据结构的地址。指针变量还可以存放一个数组或者一个函数的首地址。这么做有何意义呢?

因为数组或函数都是连续存放的。通过访问指针变量取得了数组或函数的首地址,也就找到了该数组或函数。这样一来,凡是出现数组,函数的地方都可以用一个指针变量来表示,只要该指针变量中赋予数组或函数的首地址即可。这样做,将会使程序的概念十分清楚,程序本身也精练、高效。

在C语言中,一种数据类型或数据结构往往都占有一组连续的内存单元。用“地址”这个概念并不能很好地描述一种数据类型或数据结构,而“指针”虽然实际上也是一个地址,但它却是一个数据结构的首地址,它是“指向”一个数据结构的,因而概念更为清楚,表示更为明确。 这也是引入“指针”概念的一个重要原因。
<- 返回指针讲解目录页