C++中的引用和指针

引用的定义:

C++是C语言的继承,它可以进行过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。引用就是C++对C语言的重要扩充。引用就是某一变量的一个别名,对引用的操作与对变量直接操作完全一样。

引用的声明方法:类型标识符 & 引用名 = 目标变量名

定义引用的表示方法与定义指针相似,只是用&代替了*

引用的特性:

  1. 引用在定义时必须初始化
  2. 一个变量可以有多个引用
  3. 引用一旦引用一个实体后,就再不能引用其他实体
  4. 常量引用:给常量取别名时应加const,例如:const int& b = 10 而int& b = 10是不对的

指针的定义:

指针利用地址,它的值直接指向存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。

指针的特性:

  1. 指针变量的值并非它所指向的内存位置所存储的值。我们必须使用间接访问来获取它所指向位置存储的值——即解引用 *
  2. 声明一个指针变量并不会自动分配任何内存。在对指针执行间接访问之前,指针必须进行初始化:或者使它指向一块现有的内存,或者给它分配动态内存。对未初始化的指针变量执行间接访问操作是非法的,而且这种错误常常难以检测到——不能对未初始化的指针变量解引用
  3. NULL指针就是不指向任何东西的指针。它可以赋值给一个指针,用于表示该指针并不指向任何值。对NULL指针执行间接访问操作的后果因编译器而异,两个常见的后果分别是返回内存位置零的值以及终止程序

引用与指针的区别:

  1. 引用在定义时必须初始化,指针没有要求
  2. 引用在初始化时引用一个实体后不能再引用其他实体,而指针可以在任何时候指向任何一个同类型实体
  3. 没有NULL引用,但有NULL指针
  4. 在sizeof中含义不同:引用的结果为引用类型的大小,指针始终是地址空间所占字节的个数(32位平台下为4个字节)
  5. 引用++是引用的实体增加1,指针++是指针向后偏移一个指针类型的大小
  6. 有多级的指针没有多级的引用
  7. 访问实体方式不同(指针需要显式解引用,引用则是编译器进行处理)
  8. 如果返回动态内存分配的对象或者内存,必须使用指针,引用可能引起内存泄露。
0%