C++ 引用

来源:互联网 发布:类似突袭的电影 知乎 编辑:程序博客网 时间:2024/06/06 01:47

    c++提供了一个与指针密切相关的特殊数据类型————引用。饮用时一个变量的别名,定义引用类型变量,实质上是给一个已定义的变量起一个别名系统不会为引用类型的变量分配内存空间,只是使引用类型变量与其相关联的变量使用同一个内存空间。


定义引用类型变量的一般格式为:


<数据类型> &<引用名> = <变量名>
或者
<数据类型>&<引用名> (<变量名>)


注意别把引用和取地址操作弄混了虽然都是用&操作符。其中变量必须是已经定义过的变量。例如:


int a=3;
int &ra=a; 或 int &ra(a);


这样,ra就是一个引用,它是变量a的别名。所有对这个引用ra的操作实质上就是对被引用对象a的操作。
还是例子来说明吧

 

void main()
{
 int a;
 int &ra=a;
 a=5;
 cout<<"a="<<a<<endl;
 cout<<"ra="<<ra<<endl;
 cout<<"a的地址为:"<<&a<<endl;
 cout<<"ra的地址为:="<<&ra<<endl;
 //赋值操作
 cout<<"给引用重新赋值"<<endl;
 ra=8;
 cout<<"a="<<a<<endl;
 cout<<"ra="<<ra<<endl;
 cout<<"a的地址为:"<<&a<<endl;
 cout<<"ra的地址为:="<<&ra<<endl;
}

 

来看看它们的输出结果

 

a=5
ra=5
a的地址为:0012FF60
ra的地址为:=0012FF60
给引用重新赋值
a=8
ra=8
a的地址为:0012FF60
ra的地址为:=0012FF60
请按任意键继续. . .

 

看出来了吧自始至终ra 和 a的的变化都是同步的,也就是说操作ra实际上就是操作a。可以看出引用和指针最大的区别就是:指针初始化赋值后还可以再赋值指向其它地址,而ra自从赋值以后它的地址就不会改变了

 

当然还有一些需要注意的要点:

1. 定义饮用时必须将其初始化, 引用的数据类型必须与其引用的数据类型一

2. 当引用类型变量的初始化值是常数的,则必须将此引用的定义成const类型。
3. 不能引用数组,因为数组是某个数据类型元素的集合,数组名代表的是该元素结合的首地址,它自己不是真正的数据类型。

4. 引用本身不是数据类型,所以没有引用的引用,也没有引用的指针。看例子:

void main()
{
    int a=5;
 int &ra=a;
 int &rra=ra; //正确,是a的另外一个引用。
 int *p=&ra;  //正确,是指向a的地址的指针。
//下面注意
 int & *p1=&ra;  //错误,企图建立指向引用的指针
 cout<<"a="<<a<<endl;
 cout<<"ra="<<ra<<endl;
 cout<<"rra="<<rra<<endl;
 cout<<"*p="<<*p<<endl;
}

原创粉丝点击