引用的定义:
C++是C语言的继承,它可以进行过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。引用就是C++对C语言的重要扩充。引用就是某一变量的一个别名,对引用的操作与对变量直接操作完全一样。
引用的声明方法:类型标识符 & 引用名 = 目标变量名
定义引用的表示方法与定义指针相似,只是用&代替了*
引用的特性:
- 引用在定义时必须初始化
- 一个变量可以有多个引用
- 引用一旦引用一个实体后,就再不能引用其他实体
- 常量引用:给常量取别名时应加const,例如:const int& b = 10 而int& b = 10是不对的
指针的定义:
指针利用地址,它的值直接指向存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。
指针的特性:
- 指针变量的值并非它所指向的内存位置所存储的值。我们必须使用间接访问来获取它所指向位置存储的值——即解引用 *
- 声明一个指针变量并不会自动分配任何内存。在对指针执行间接访问之前,指针必须进行初始化:或者使它指向一块现有的内存,或者给它分配动态内存。对未初始化的指针变量执行间接访问操作是非法的,而且这种错误常常难以检测到——不能对未初始化的指针变量解引用
- NULL指针就是不指向任何东西的指针。它可以赋值给一个指针,用于表示该指针并不指向任何值。对NULL指针执行间接访问操作的后果因编译器而异,两个常见的后果分别是返回内存位置零的值以及终止程序
引用与指针的区别:
- 引用在定义时必须初始化,指针没有要求
- 引用在初始化时引用一个实体后不能再引用其他实体,而指针可以在任何时候指向任何一个同类型实体
- 没有NULL引用,但有NULL指针
- 在sizeof中含义不同:引用的结果为引用类型的大小,指针始终是地址空间所占字节的个数(32位平台下为4个字节)
- 引用++是引用的实体增加1,指针++是指针向后偏移一个指针类型的大小
- 有多级的指针没有多级的引用
- 访问实体方式不同(指针需要显式解引用,引用则是编译器进行处理)
- 如果返回动态内存分配的对象或者内存,必须使用指针,引用可能引起内存泄露。