。 内存单元的指针和内存单元的内容是两个不同的概念。 可以用一个通俗的例子来说明
它们之间的关系。我们到银行去存取款时, 银行工作人员将根据我们的帐号去找我们的存
款单, 找到之后在存单上写入存款、取款的金额。在这里,帐号就是存单的指针, 存款数
是存单的内容。对于一个内存单元来说,单元的地址即为指针,其中存放的数据才是该单元
的内容。在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。因此,一个指
针变量的值就是某个内存单元的地址或称为某内存单元的指针。
图中,设有字符变量 C,其内容为“K”(ASCII 码为十进制数 75),C 占用了 011A 号单元
(地址用十六进数表示)。设有指针变量 P,内容为 011A,这种情况我们称为 P 指向变量 C,
或说 P 是指向变量 C 的指针。
严格地说,一个指针是一个地址,是一个常量。而一个指针变量却可以被赋予不同的指
针值,是变量。但常把指针变量简称为指针。为了避免混淆,我们中约定:“指针”是指地
址,是常量,“指针变量”是指取值为地址的变量。定义指针的目的是为了通过指针去访问
内存单元。
既然指针变量的值是一个地址,那么这个地址不仅可以是变量的地址,也可以是其它数
据结构的地址。在一个指针变量中存放一个数组或一个函数的首地址有何意义呢? 因为数
组或函数都是连续存放的。通过访问指针变量取得了数组或函数的首地址,也就找到了该数
组或函数。这样一来,凡是出现数组,函数的地方都可以用一个指针变量来表示,只要该指
针变量中赋予数组或函数的首地址即可。这样做,将会使程序的概念十分清楚,程序本身也
谭浩强 C 语言程序设计 2001 年 5 月 1 日
精练,高效。在C语言中,一种数据类型或数据结构往往都占有一组连续的内存单元。 用
“地址”这个概念并不能很好地描述一种数据类型或数据结构,而“指针”虽然实际上也是一
个地址,但它却是一个数据结构的首地址,它是“指向”一个数据结构的,因而概念更为清
楚,表示更为明确。 这也是引入“指针”概念的一个重要原因。
10.2 变量的指针和指向变量的指针变量
变量的指针就是变量的地址。存放变量地址的变量是指针变量。即在C语言中,允许用
一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个变量的地
址或称为某变量的指针。
为了表示指针变量和它所指向的变量之间的关系,在程序中用“*”符号表示“指向”,
例如,i_pointer 代表指针变量,而*i_pointer 是 i_pointer 所指向的变量。
因此,下面两个语句作用相同:
i=3;
*i_pointer=3;
第二个语句的含义是将 3 赋给指针变量 i_pointer 所指向的变量。
10.2.1 定义一个指针变量
对指针变量的定义包括三个内容:
(1) 指针类型说明,即定义变量为一个指针变量;
(2) 指针变量名;
(3) 变量值(指针)