引用

C++中,还有一个引用的概念。引用就是一个变量的别名,它需要用另一个变量或对象来初始化自身。引用就像一个人的外号一样,例如:有一个人,他的名字叫做张旭,因他在家排行老三,别人给他取了一个外号叫张三,这样,我们叫张三或张旭,指的都是同一个人。下面的代码声明了一个引用b,并用变量a进行了初始化。

int a = 5;

int &b = a; //&表示申明一个引用。引用必须在申明时进行初始化

考虑下面代码:

int a = 5;

int &b = a;

int c=3;

b=c;        //此处并不是将b变成c的引用,而是给b赋值,此时,ba的值都变成了3

引用和用来初始化引用的变量指向的是同一块内存,因此通过引用或者变量可以改变同一块内存中的内容。引用一旦初始化,它就代表了一块特定的内存,再也不能代表其他的内存。

那么引用和指针变量有什么区别呢?

引用只是一个别名,是一个变量或对象的替换名称。引用的地址没有任何意义,因此C++没有提供访问引用本身地址的方法。引用的地址就是它所引用的变量或者对象的地址,对引用的地址所做的操作就是对被引用的变量或对象的地址所做的操作。指针是地址,指针变量要存储地址值,因此要占用存储空间,我们可以随时修改指针变量所保存的地址值,从而指向其他的内存。

引用和指针变量的内存模型如图2.15所示。

在编写程序时,很少直接使用引用,即用一个变量来初始化一个引用(int a; int &b=a),如果这么做,通过变量和引用都可以修改同一块内存的内容,在程序中,就很容易出现问题,不知道此时内存中的值到底是多少了。

引用多数用在函数的形参定义上,在调用函数传参时,我们经常使用指针传递,一是避免在实参占较大内存时发生值的复制,二是完成一些特殊的作用,例如,要在函数中修改实参所指向内存中的内容。同样,使用引用作为函数的形参也能完成指针的功能,在有些情况下还能达到比使用指针更好的效果。

下面,我们以一段程序(如例2-23所示)的讲解作为引用这一小节的结束。

2-23

#include <iostream.h>

//change函数主要用来交换ab的值

void change(int& a,int& b);

 

void main()

{

     int x=5;

     int y=3;

     cout<<"original x="<<x<<endl;

     cout<<"original y="<<y<<endl;

     change(x,y);   //此处如果用指针传递则调用change&x, &y),这样很容易让人

                    迷惑,不知道交换的是xy的值还是xy的地址此处用引用

                    可读性就比指针要好

     cout<<"changed x="<<x<<endl;

     cout<<"changed y="<<y<<endl;

}

/*change()函数的实现中,我们采用了一个小算法,完成了ab值的交换,读者下来可以仔细研读,细细体味一下(读者还可以采用其他的方法,当然也可以直接使用通常的实现,定义一个临时变量,完成ab值的交换)*/

void change(int& a,int& b)

{

     a=a+b;

     b=a-b;

     a=a-b;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值