C++详解 引用的应用

开发 后端
在C++中,有一个引用的概念。在这篇文章里,笔者将为大家详解引用的应用。

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

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

  考虑下面代码:

  1. int a = 5;  
  2. int &b = a;  
  3. int c=3; //此处并不是将b变成c的引用,而是给b赋值,此时,b和a的值都变成了3  

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

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

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

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

引用和指针变量的内存模型

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

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

  下面,我们以一段程序的讲解作为引用这一小节的结束。

  例:

  1. #include <iostream.h>  
  2.   //change函数主要用来交换a和b的值  
  3.   void change(int& a,int& b);  
  4.   void main()  
  5.   {  
  6.   int x=5;  
  7.   int y=3;  
  8.   cout<<"original x="<<x<<endl;  
  9.   cout<<"original y="<<y<<endl;  
  10.   change(x,y);   //此处如果用指针传递,则调用change(&x, &y),这样很容易让人迷惑,不知道交换的是x和y的值,还是x和y的地址?此处用引用,可读性就比指针要好  
  11.   cout<<"changed x="<<x<<endl;  
  12.   cout<<"changed y="<<y<<endl;  
  13.   }  
  14.   /*在change()函数的实现中,我们采用了一个小算法,完成了a和b值的交换,读者下来可以仔细研读,细细体味一下(读者还可以采用其他的方法,当然也可以直接使用通常的实现,定义一个临时变量,完成a和b值的交换)*/ 
  15.   void change(int& a,int& b)  
  16.   {  
  17.   a=a+b;  
  18.   b=a-b;  
  19.   a=a-b;  
  20.   } 

【编辑推荐】

  1. C++常量引用正确应用方法
  2. 条款5 引用是别名而非指针
  3. 如何更好的进行C++引用?
  4. C++引用基本概念详解
  5. 简析C++函数参数引用问题
责任编辑:韩亚珊 来源: 中国IT实验室
相关推荐

2024-01-18 10:27:30

C++引用函数

2010-02-02 10:33:22

C++引用

2010-02-05 17:49:24

C++常量引用

2023-09-13 14:42:08

typedefC++

2010-02-01 10:43:10

C++跨平台应用

2024-01-29 16:55:38

C++引用开发

2011-07-20 15:58:53

C++引用

2010-01-15 18:06:20

C++引用

2009-08-14 17:09:48

C#引用类型

2010-02-01 15:59:09

C++逗号操作符

2010-02-05 15:51:06

C++ explici

2021-12-21 15:31:10

C++语言指针

2011-07-14 23:27:05

C++引用

2011-04-20 09:50:45

Virtual

2012-02-13 10:18:42

C++ 11

2010-02-02 16:49:32

C++中文字符

2023-12-13 10:08:59

C++原子代码

2010-01-20 18:24:51

C++CLI

2015-05-13 10:37:58

C++指针与引用

2023-11-22 13:22:51

C++函数
点赞
收藏

51CTO技术栈公众号