2007winter

做自己真心想做的事,你就没事了

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

对一个数据可以建立一个“引用”,作用是为一个变量起一个别名。这是C++对C的一个重要扩充。

int a; //定义a是整型变量

int &b = a; //声明b是a的引用

声明了b是a的引用,即b是a的别名。经过这样的声明后,使用a或b的作用相同,都代表同一变量。

可以这样理解引用:声明b为引用,并不需要另外开辟内存单元来存放b的值。b和a占内存中同一个存储单元,它们具有同一地址。即使变量b具有变量a的地址。

注意:

1. 引用不是一种独立的数据类型,对引用只有声明,没有定义。必须先定义一个变量,然后声明对该变量建立一个引用(别名)。

2. 声明一个引用时,必须同时使之初始化,即声明它代表哪一个变量。当引用作为函数的形参时不必在声明中初始化,它的初始化是在函数调用时的虚实结合实现的,即作为形参的引用是实参的别名。

3. 在声明一个引用后,不能再使之作为另一个变量的引用。比如声明了b是变量a的引用后,在其有效作用范围内,b始终与其代表的变量a相联系,不能再作为其他变量的引用。

int a1,a2;

int &b=a1;

int &b=a2; //错误。试图使b又变成a2的引用,不合法

4. 不能建立引用数组。如:

int a[5];

int &b[5]=a; //错误,不能建立引用数组

int &b=a[0]; //错误,不能作为数组元素的别名

5. 不能建立引用的引用。如:

int a=3;

int &b=a; //正确

int &c=b; //错误

6. 不能建立指向引用的指针。 如:

int a=3;

int &b=a;

int *p=b; //错误

7. 可以取引用的地址。如已经声明b是a的引用,那么&b就是变量a的地址&a.

int *pt;

pt=&b; //把变量a的地址&a赋给指针变量pt

8. 区别引用声明符& 和取地址运算符&。出现在声明中的&是引用声明符,其他情况下的&是取地址运算符。

二者形式相同,含义不同。在声明了引用之后,在使用它时不带&,而只用引用的名字(如b,而不是&b)。

 

posted on 2012-09-30 23:15  2007winter  阅读(145)  评论(0)    收藏  举报