现在的位置: 首页 > 综合 > 正文

指针

2018年05月24日 ⁄ 综合 ⁄ 共 1363字 ⁄ 字号 评论关闭

C++中,一种比较重要、也较难掌握的一种数据类型,就是指针类型。所谓指针就是在内存中的地址,它可能是变量的地址,也可能是函数的入口地址。如果指针变量存储的地址是变量的地址,我们称该指针为变量的指针(或变量指针);如果指针变量存储的地址是函数的入口地址,我们称该指针为函数的指针(或函数指针)。
  注意:指针变量与变量指针的含义不同:指针变量也简称为指针,是指它是一个变量,且该变量是指针类型的;而变量指针是指它是一个变量,该变量是指针类型的,且它存放另一个变量的地址。
  我们知道:局部变量等的内存空间是编译器在栈中自动分配的,它的作用域和生存期局限于所定义的程序块中。我们也可以在堆中用new运算符自己申请内存,该内存的生存期由程序员自己控制。指针的一个重要用途就是:可以匿名访问通过new运算符在堆中分配的内存。
  一般说来,变量有两种方法访问:直接通过变量名访问或通过指针间接访问。以前我们介绍的程序中,对变量的访问大多是通过变量名访问的,变量也可以通过指针间接访问,即通过变量的指针而找到变量的值,这是我们下面要学习的内容。此外,我们还要学习函数的指针。
  引用为变量提供了一个别名,变量通过引用访问与通过变量名访问是完全等价的。引用提供了与指针相同的能力,但比指针更为直观,更易于理解。 

指针是一种数据类型,具有指针类型的变量称为指针变量。实际上,可以把指针变量(也简称为指针)看成一种特殊的变量,它用来存放某种类型变量的地址。一个指针存放了某个变量的地址值,就称这个指针指向了被存放地址的变量。简单地说,指针就是内存地址,它的值表示被存储的数据的所在的地址,而不是被存储的内容。
  为了进一步说清楚指针的含义,需要明白数据在机器中是如何存储和访问的。我们知道,内存是按字节(8位)排列的存储空间,每个字节有一个编号,称之为内存地址,就象一个大楼里各个房间有一个编号一样。内存中存放的数据包括各种类型的数、地址,还有程序的指令代码,等等。保存在内存中的变量一般占几个字节,我们称之为内存单元,一个内存单元保存一个变量的值。不同的数据类型在机器内存中所占的内存单元的大小一般是不一样的,例如,整型数占两个字节,浮点数占4个字节等。但是,在同一个机器上,相同的数据类型占有相同大小的存储单元,而在不同的机器系统里,即使相同的数据类型所占的存储单元也可能是不一样的,例如,16位机器上,一个整型数占两个字节,而在32位机器上,一个整型数占4个字节。
  为了访问某个单元中的数据,就必须知道该单元在内存中的地址。这跟我们的实际生活很类似,比如说,当我们要找某一个人的时候,就必须知道他的当前地址,否则,就无法达到目的。
  在这里,务必弄清楚一个内存单元的地址与内存单元的内容的区别。
  打个比方,为了打开一个A抽屉,有两种办法,一种是将A抽屉的钥匙带在身上,需要时直接找出该钥匙打开抽屉,取出所需的东西,另一种办法是,为安全起见,将该A抽屉的钥匙放在另一个抽屉B中锁起来。如果需要打开A抽屉,就需要先找出B抽屉中的钥匙,打开B抽屉,取出A抽屉的钥匙,再打开A抽屉,取出A 抽屉中之物,这就是"间接访问"。指针变量相当于B抽屉,B抽屉中的东西相当于地址(如果把钥匙比喻成地址,不甚确切),A抽屉中的东西,相当于存储单元的内容。 

抱歉!评论已关闭.