C++中的引用与指针浅析

Xiaohui Huang, [email protected]
China University of Geosciences, Wuhan , 430074
School of Computer. Network Engineering


C++中的引用与指针浅析

一、引言

引用与指针均属于C++中的复合类型,两种类型均实现了对其他对象的间接访问,然而两者也有不同之处,本篇文章就两者进行一个简要的分析。

二、引用

通俗地讲,引用(Reference)就是为对象起了另外一个名字,当我们对一个已经定义了的引用(引用在定义的时候必须初始化)进行操作时,其实我们实际上就是对初始化这个引用的对象进行相关的操作。一旦我们定义了一个引用,程序就会将引用和它的初始值绑定在一起,而不是将它的初始值赋给这个引用。
下面是定义一个引用的方法:

int &refer1 = a;//正确
int &refer2;//错误,在定义一个引用的时候就必须初始化这个引用
int &refer3 = refer1;//正确,可以用已定义的同类型的引用初始化另外一个引用

上述定义了引用refer1之后,当我们在程序中对引用refer进行操作时,实际上就是对引用refer所绑定的对象a进行操作。

在使用引用的时候,我们需要注意以下几点:

(1)引用必须被初始化:当我们定义一个引用的时候就必须同时初始化这个引用,例如上例中的定义refer2这个引用就是错误的,只定义而没有初始化,并且一个引用只能够被同类型的对象初始化,例如,一个int型的引用只能被int型的对象初始化;

(2)当一个引用被定义后,在程序结束之前这个引用是不可以与其他同类型对象绑定的(此处不能够说被其他同类型对象赋值,因为引用实际上不是一个变量,它只是初始化这个引用的变量的别名,故为这个引用赋其他值这个说法是错误的),例如:

int a = 666;
int b = 555;
int &refer1 = a;//正确
&refer1 = b;//错误,引用一旦被定义后不可被重新绑定其他对象

(3)可以用一个已定义的引用来初始化一个新的引用,但是要求两个引用必须是同类型。


三、指针

指针和引用一样,也提供了对对象的间接访问,但两者也有不同之处。其一,指针本身就是一个对象,允许对指针进行赋值和拷贝,而且在指针的生命周期内可以先后指向几个不同的对象;其二,指针无需在定义时赋初值,和其他内置类型一样,在块的作用域内定义的指针如果没有被初始化,那么该指针也将拥有一个不确定的值。

下面一个例子说明了指针的定义和使用的方法,已经指针里面存储的内容:

#include

using namespace std;

int main()
{
	int a = 4;
	int b = 5; 
	int *p;//此时指针p默认为空指针
	int *p1 = &a;//定义一个指针p1,并初始化这个指针
	int *p2 = &b;
	p = p1;//正确,指针之间的赋值
	int **p3 = &p2; 
	cout<<"a:"<<&a<

来看看程序运行的结果:

C++中的引用与指针浅析_第1张图片

程序相关说明:

(1)变量a的地址是0x28ff00,指针p1被变量a初始化,故指针p1里面的存放的是变量a的地址,当我们要通过指针p1使用变量a时,我们就必须通过符号"* "来得到指针所指向的对象。

(2)在定义一个指针的时候可以不初始化这个指针,在程序运行的过程中在初始化这个指针,例如指针p。

(3)p3是一个指向指针的指针,p3存放的是另外一个指针的地址,从结果运行图中可以显然看出。


注意:允许有指向指针的引用,因为指针本身是一个变量,而引用是一个变量的别名,所以可以存在对指针的引用,例如:

int a = 4;
int *p;//p是一个int类型的指针 
int *&refer = p;//refer是一个对指针p的引用

refer = &a;//实际上就是p = &a; 
*refer = 0;//实际上就是*p = 0;即将a的值变为0 

你可能感兴趣的:(C++,引用,指针,C++)