购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.7.1 指针与地址

众所周知,一个程序的指令、常量和变量等都要存放在机器内存单元中,而机器内存是按字节来划分存储单元的,给内存中每个字节都赋予一个编号,这就是存储单元的地址。各个存储单元中所存放的数据,称为该存储单元的内容。计算机在执行任何一个程序时都要涉及寻址操作。所谓寻址,就是按照内存单元的地址来访问该存储单元中的内容,即按地址来读或写该单元中的数据。由于通过地址可以找到所需要的存储单元,因此可以说地址是指向存储单元的。

在C语言中为了实现直接对内存单元进行操作,引入了指针类型的数据。指针类型数据是专门用来确定其他类型数据地址的,一个变量的地址就称为该变量的指针。例如,有一个整型变量i存放在内存单元40H中,则该内存单元地址40H就是变量i的指针。如果有一个变量专门用来存放另一个变量的地址,则称之为“指针变量”,例如,用另一个变量ip来存放整型变量i的地址40H,则ip即为一个指针变量。

变量的指针和指针变量是两个不同的概念。变量的指针就是该变量的地址,而指针变量里面存放则是另一个变量在内存中的地址,拥有这个地址的变量称为该指针变量所指向的变量。每个变量都有它自己的指针(即地址),而每个指针变量都是指向另一个变量的。

为了表示指针变量和它所指向的变量之间的关系,C 语言中用符号“*”来表示“指向”。例如,整型变量i的地址40H存放在指针变量ip中,则可用*ip来表示指针变量ip所指向的变量,即*ip也表示变量i,下面两个赋值语句:

都是给同一个变量赋值0x50。图2.11形象地说明了指针变量ip和它所指向的变量i之间的关系。

图2.11 指针变量和它所指向的变量

从图2.11可以看到,对于同一个变量i,可以通过变量名i来访问它,也可以通过指向它的指针变量ip,用*ip来访问它。前者称为直接访问,后者称为间接访问。符号“*”称为指针运算符,它只能与指针变量一起联用,结果是得到该指针变量所指向变量的值。

在2.2.5节中介绍了一个取地址运算符“&”,它可以与一个变量联用,其作用是求取该变量的地址。通过运算符“&”可以将一个变量的地址赋值给一个指针变量。例如:赋值语句 ip=&i;其作用是取得变量 i 的地址并赋给指针变量 ip。通过这种赋值使指针变量ip指向了变量i。不要将符号“&”和“*”弄混淆,&i是取变量i的地址,*ip是取指针变量ip所指向变量的值。 0uH6IJ/qXqLSgCSAkE/FsCVReS8IX956i+McGLj4jOttuzNpZUOxoagG2CfXJvKP

点击中间区域
呼出菜单
上一章
目录
下一章
×