指针是一种数据类型,指针与内存单元的地址密切相关。
内存由内存单元构成。
对于内存单元,需关注两个概念:
(1)内存单元的地址:即内存单元的编号。
注意:系统为方便管理内存空间,给每一个内存单元进行整数编号,将内存单元的编号称为内存单元的地址,用十六进制表示。
(2)内存单元的内容:存放在内存单元中的数据。
内存单元的直接访问与间接访问:
举个例子:用钥匙打开会议室的门。
如果我们有要是,则可直接打开会议室的门;如果我们没有钥匙,但知道钥匙存放的地点(如钥匙放在505办公室),那么我们会按照这个地址取出钥匙,同样可以打开会议室的门。这是一种直接访问和间接访问的思想。
在C/C++语言中,每个变量都分配有确定的存储空间。使用变量名可直接访问内存中的数据。通过变量的地址也可间接访问内存中的数据。
地址与指针:
(1)定义一个变量,系统按变量类型为变量分配不同数目的内存单元,将其第一个内存单元的地址作为变量的地址。
(2)在C/C++中,允许定义一种特殊变量,用于存放某个变量的地址(该特殊变量的内存单元的内容是别的变量的内存地址)。
结论:我们将存放(别的变量的)“地址”的变量称为指针变量,这里的“地址”就是指针。因此,变量的地址就是变量的指针。
指针类型的主要用途:
(1)参数传递:指针作参数可以实现参数按引用传递的功能(即通过形参可以改变实参的值)。
(2)动态分配:利用动态分配可构建动态数组,动态数组需要借助指针实现。
(3)数据结构:创建可伸缩的数据结构,如链表、栈与队列、树和图等。
(4)多态处理:面向对象编程中“运行多态性”的处理是利用指针与引用实现的。