13.4.5 指针和内存地址

在结束Objective-C中的指针讨论之前,应该指出实际如何实现指针的细节。计算机的内存可以理解为存储单元的顺序集合。计算机内存的每个单元都有一个相关的编号,称为地址。通常,计算机内存的首地址为0。在大多数计算机系统中,一个单元就是一字节。

计算机使用内存来存储计算机程序的指令和程序相关变量的值。所以,如果声明变量count为int数据,那么在程序执行时,系统会分配内存地址来存储count的值。比如,这个位置也许是内存地址1000FF16

幸运的是,你自己不需要考虑指定给变量的特定内存地址,它们是系统自动处理的。然而,掌握每个变量都有唯一内存地址这个知识,对于理解指针的工作方式会有所帮助。

在Objective-C语言中,对变量应用地址运算符,产生的值是变量在计算机内存中的实际存储地址(显然,这就是地址运算符名称的由来)。所以,语句


intPtr=&count;


向intPtr分配指定给变量count的计算机内存地址。这样,如果count位于地址1000FF16,那么这个语句将数值0x1000FF赋给intPtr。

对指针变量应用间接寻址运算符,表达式


*intPtr


的作用就是将包含在指针变量中的数值当作内存地址。然后获取该内存地址中存储的值并按照指针变量声明的类型进行解释。所以,如果intPtr是int指针,那么系统将存储在内存地址中由*intPtr给出的值解释为整型数据。