对于习惯使用C进行开发的程序员来说,在看到C++中出现的&符号,可能会犯迷糊,因为在C语言中这个符号表示了取地址符,但是在C++中,它除了取地址,还有其它的用途,叫做引用(reference),引用是C++引入的新语言特性。

引用的概念

引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。

引用的声明方法:类型标识符 &引用名=目标变量名;

例如:

int a;

int &ra=a;  // 定义引用ra,它是变量a的引用,即别名。

说明:

1)&在此不是求地址运算,而是起标识作用。

2)类型标识符是指目标变量的类型。

3)声明引用时,必须同时对其进行初始化,否则编译器会报错。

4)引用声明后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。

ra=1;  等价于  a=1;

5)声明一个引用,不是新定义了一个新的变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。

6)不能建立数组的引用。因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名。

引用可以用const修饰,表示只读,用这种方式声明的引用,不能通过引用对目标变量的值进行修改。

int a;

const int &ra=a;

a=10;    // 可以

ra=10;   // 不行

引用的应用

引用的主要作用就是作为函数的参数。以前的C语言中函数参数传递是值传递,如果有大块数据作为参数传递的时候,采用的方案是数据的地址。但是在C++中,又增加了一种同样有效率的选择,就是引用。

示例(book212.cpp)

       运行结果

从以上的示例可以看出,传递引用给函数与传递指针的效果是一样的。这时,被调函数的参数就成为调用者调函数中的变量或对象的一个别名来使用,所以在被调函数中对引用的操作就是对目标变量的操作。

在很多资料中,把引用的优点过于夸大,在我看来,引用的好处就是调用函数的时候,不用填写取地址符&,子函数中也不写取变量符*,结构体和类不用->取成员。我更倾向传递地址的方式,因为更直观,不管是在函数内部还是函数被调用的地方,一眼就能清楚是否是地址。

引用还可以作为函数的返回值,但我不建议这么用,我实在看不出这样做有什么好处,那就没必要把事情搞得那么复杂,所以这里就不介绍了。

版权声明

C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。

来源:C语言技术网(www.freecplus.net)

作者:码农有道

如果这篇文章对您有帮助,请点赞支持,或在您的博客中转发我的文章,谢谢!!!

如果文章有错别字,或者内容有误,或其他的建议或意见,请您留言指正,非常感谢!!!

C++语言引用的介绍和示例相关推荐

  1. C++语言vector容器介绍和示例

    之前我们在声明数组的时候,采用的是datatype  array[len]的形式,数组在分配之后,不能调整大小,删除和插入数据时操作十分的繁琐,虽然可以采用链表,但是链表的操作更麻烦,我喜欢简单的方法 ...

  2. C语言tolower函数介绍、示例和实现

    文章目录 1.包含头文件 2.函数声明 3.功能说明 4.示例 5.自定义的tolower函数的实现方法 6.获取视频教程 7.版权声明 C语言tolower函数用于把大写字母转换为小写字母. 在本文 ...

  3. C语言isupper函数介绍、示例和实现

    文章目录 1.包含头文件 2.函数声明 3.功能说明 4.示例 5.自定义的isupper函数的实现方法 6.获取视频教程 7.版权声明 C语言isupper函数用于判断字符是否为大写字母(A-Z). ...

  4. C语言islower函数介绍、示例和实现

    文章目录 1.包含头文件 2.函数声明 3.功能说明 4.示例 5.自定义的islower函数的实现方法 6.获取视频教程 7.版权声明 C语言islower函数用于判断字符是否为小写字母(a-z). ...

  5. C语言isalnum函数介绍、示例和实现

    文章目录 1.包含头文件 2.函数声明 3.功能说明 4.示例 5.自定义的isalnum函数的实现方法 6.获取视频教程 7.版权声明 C语言isalnum函数用于判断字符是否为字母(a-z和A-Z ...

  6. C语言关系运算符介绍和示例

    文章目录 1.关系运算符介绍 2.应用示例 3.获取视频教程 4.版权声明 1.关系运算符介绍 关系运算(Relational Operators),用于判断条件,决定程序的流程. 关系 数学中的表示 ...

  7. C++语言string类介绍和示例

    在C语言中,用0结尾的字符数组表示字符串,C的字符串有一个问题,就是定义后大小不能改变,存入的内容只能比数组小,不能大,如果不小心存多了,会引起内存的溢出,这个问题让程序员很郁闷. C++的strin ...

  8. java实现c语言的函数_C语言tolower函数介绍、示例和实现

    C语言tolower函数用于把大写字母转换为小写字母. 在本文中,我们先来介绍tolower函数的使用方法,然后编写一个自定义的_tolower函数,实现与tolower函数相同的功能. 1.包含头文 ...

  9. C语言isdigit函数介绍、示例和实现

    文章目录 1.包含头文件 2.函数声明 3.功能说明 4.示例 5.自定义的isdigit函数的实现方法 6.获取视频教程 7.版权声明 isdigit函数用于判断字符是否为数字(0-9). 在本文中 ...

最新文章

  1. 排序算法(一) 冒泡排序
  2. 子串、子数组与子序列类型问题的动态规划求解(Leetcode题解-Python语言)
  3. ftp安装包_【干货分享】原来cisco通过FTP,TFTP系统升级是这样做的?
  4. 曾为浮云遮望眼,平沙莽莽黄入天。 终有一缘得一道,拨开云雾见青天! ——论如何快速删除上亿级数据集思路
  5. gawk如何在win7安装_电脑怎样安装win7系统
  6. BZOJ2241 [SDOI2011]打地鼠 【模拟】
  7. MSDN Library Visual Studio6.0 简体中文版下载及安装
  8. lodash中curry的实现
  9. qml 文本框获取焦点
  10. 直击|ofo测试折扣商城 押金可转换为金币消费
  11. PDF的页面方向倒了,怎么调整并保存
  12. 【2021春招】2021年阿里笔试真题3.6/3.8/3.10/3.12记录
  13. SpringCache整合EhCache2和EhCache3(JCache)
  14. html、css --苏宁官网静态界面
  15. SAP ST05 追踪找表法
  16. scrum立会报告+燃尽图(第三周第三次)
  17. Gogs-轻量级代码仓库
  18. 发送邮件报错:452 Too many recipients
  19. 谷歌中国ICP牌照过期 高管暗示员工自谋出路
  20. 机器学习实战教程(三):决策树实战篇之为自己配个隐形眼镜

热门文章

  1. 1000道Python题库系列分享23(61个填空题)
  2. 红亚科技联手董付国老师开启Python实训教育新篇章
  3. arduino loar_如何使用Arduino开发板制作函数生成器(波形发生器)
  4. h5 video 手机 显示第一帧_【图像处理二】HDMI显示(一)
  5. 基于OpenCV实现图像线性变化
  6. 原生js、jq移入移出事件
  7. c语言整型的最大范围,整型变量范围最大到32750?
  8. 计算机特殊符号大全集,{精心收藏}电脑输入特殊字符大全
  9. background背景图片自适应_一侧定宽、一侧自适应,尽量多的方案实现?「前端剑指offer」...
  10. linux 行尾加字符串,linux – cat in expect脚本在字符串结尾添加新行