17xie > VC++深入详解 > 2.2.9 引用
背景:                 
[本书目录] [图书首页] [本书讨论区]  
链接地址:http://www.17xie.com/read-36297.html    注册17xie 一起来写书 实现您的出书梦想!

2.2.9  引用

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;

}


字数:2039    最后更新:8个月以前 [03-13 21:33]happyskynet 修改
本页编辑者:happyskynet  
[前一页]:2.2.8 函数的覆盖和隐…  [后一页]:2.2.10 C++类的设计习…
[在本页中加入书签] [收藏本书] [推荐本书]
  17xie论坛 > 本书讨论区 > 本页评论   (共0条)
发表评论

用户名称 匿名发表
评论内容
验证码

关于我们 | 版权声明 | 免责声明 | 诚聘英才 | 联系我们 | 合作伙伴 | 友情链接 | 广告合作 | 提交意见
Copyright © 2007 17xie.com 互联网协同写书平台 京ICP备08002671号