在定义或声明函数时,我们可以将函数的形参指定为引用的形式,这样在调用函数时就会将实参和形参绑定在一起,让它们都指代同一份数据。

如此一来,如果在函数体中修改了形参的数据,那么实参的数据也会被修改,从而拥有“在函数内部影响函数外部数据”的效果。
一个能够展现按引用传参的优势的例子就是交换两个数的值,请看下面的代码:

#include <iostream>
using namespace std;
void swap1(int a, int b);
void swap2(int *p1, int *p2);
void swap3(int &r1, int &r2);
int main() {int num1, num2;cout << "Input two integers: ";cin >> num1 >> num2;swap1(num1, num2);cout << num1 << " " << num2 << endl;cout << "Input two integers: ";cin >> num1 >> num2;swap2(&num1, &num2);cout << num1 << " " << num2 << endl;cout << "Input two integers: ";cin >> num1 >> num2;swap3(num1, num2);cout << num1 << " " << num2 << endl;return 0;
}
//直接传递参数内容
void swap1(int a, int b) {int temp = a;a = b;b = temp;
}
//传递指针
void swap2(int *p1, int *p2) {int temp = *p1;*p1 = *p2;*p2 = temp;
}
//按引用传参
void swap3(int &r1, int &r2) {int temp = r1;r1 = r2;r2 = temp;
}
Input two integers: 12 45
12 45
Input two integers: 12 45
45 12
Input two integers: 12 45
45 12

本例演示了三种交换变量的值的方法:

1) swap1() 直接传递参数的内容,不能达到交换两个数的值的目的。对于 swap1() 来说,a、b 是形参,是作用范围仅限于函数内部的局部变量,它们有自己独立的内存,和 num1、num2 指代的数据不一样。调用函数时分别将 num1、num2 的值传递给 a、b,此后 num1、num2 和 a、b 再无任何关系,在 swap1() 内部修改 a、b 的值不会影响函数外部的 num1、num2,更不会改变 num1、num2 的值。
2) swap2() 传递的是指针,能够达到交换两个数的值的目的。调用函数时,分别将 num1、num2 的指针传递给 p1、p2,此后 p1、p2 指向 a、b 所代表的数据,在函数内部可以通过指针间接地修改 a、b 的值。我们在《C语言指针变量作为函数参数》中也对比过第 1)、2) 中方式的区别。
2) swap3() 是按引用传递,能够达到交换两个数的值的目的。调用函数时,分别将 r1、r2 绑定到 num1、num2 所指代的数据,此后 r1 和 num1、r2 和 num2 就都代表同一份数据了,通过 r1 修改数据后会影响 num1,通过 r2 修改数据后也会影响 num2。

从以上代码的编写中可以发现,按引用传参在使用形式上比指针更加直观。在以后的 C++ 编程中,我鼓励读者大量使用引用,它一般可以代替指针(当然指针在C++中也不可或缺),C++ 标准库也是这样做的。

C++引用作为函数返回值
引用除了可以作为函数形参,还可以作为函数返回值,请看下面的例子:

#include <iostream>
using namespace std;
int &plus10(int &r) {r += 10;return r;
}
int main() {int num1 = 10;int num2 = plus10(num1);cout << num1 << " " << num2 << endl;return 0;
}

C++引用作为函数参数相关推荐

  1. 2020-09-22C++学习笔记之引用1(1.引用(普通引用)2.引用做函数参数 3.引用的意义 4.引用本质5.引用结论 6.函数返回值是引用(引用当左值)7测试代码)

    2020-09-22C++学习笔记之引用1(1.引用(普通引用)2.引用做函数参数 3.引用的意义 4.引用本质5.引用结论 6.函数返回值是引用(引用当左值)7测试代码) 1.引用(普通引用) 变量 ...

  2. Python基础day05【函数(函数传参的两种形式、函数形参)、拆包、引用、可变与不可变类型、引用做函数参数注意点】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员]    目录 0.复习 1.函数传参的两种形式[掌握] 2.函数形参 2.1.缺省参数(默认参数) ...

  3. “引用作为函数参数”与 “引用作为函数返回值”

    一.引用作为函数参数 作为函数参数时引用有两种原因: 1.在函数内部会对此参数进行修改:2.提高函数调用和运行效率. 关于第一点,都知道C++里提到函数就会提到形参和实参.如果函数的参数实质就是形参, ...

  4. C++中,引用作为函数参数

    引用作为函数参数 C++之所以增加引用类型, 主要是把它作为函数参数,以扩 充函数传递数据的功能. -------------------- c++,函数传参: (1)将变量名作为实参和形参.这时传给 ...

  5. c/c++教程 - 2.2 引用的使用方法,引用做函数参数,引用做返回值,引用的本质,常量引用

    2. 引用 学习目的:取代C中的指针. 目录 2. 引用 2.1 引用的基本使用方法 2.2 引用注意事项 2.3 引用做函数参数 2.4引用做函数返回值 2.5 引用的本质 2.6 常量引用 相关教 ...

  6. C++ 笔记(13)— 函数(函数声明、函数定义、函数调用[传值、指针、引用]、函数参数默认值、函数重载)

    每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数. 1. 函数声明 函数声明告诉编译器函数的名称.返回类型和参数.函数声明包括以下几个部分: ret ...

  7. php 函数参数 引用,php 函数参数的引用

    error_reporting(E_ALL); sweep ($ignore, $ignore); // no errors occur here sweep($a=1,$b=1); /** 程序设计 ...

  8. c++中引用作为函数参数

    介绍c++中的引用作为函数 考研过程中,遇到的引用类型让我很烦,所以记录一下 1.引用的作用 引用类型通常被用于主子函数需互传大量数据的设计之中,从而减少大量数据经过堆栈的复制: 2.引用的意义 c+ ...

  9. [课程视频]指针、引用、函数参数、内联函数等

    今天气温低.风大,我穿一个略正式的T恤衫.一条大短裤和人字拖在办公室里录制最新一期课程视频.反正拍不到下半身,所以下半身衣着随意我面向的录制环境如下图,我背后是一个绿幕.设备由广东省教学改革项目资金提 ...

最新文章

  1. 使用卷积神经网络预防疲劳驾驶事故
  2. Netty实现自定义简单的编解码器(二)
  3. c# 第六课 linq
  4. 限流算法之漏桶算法、令牌桶算法
  5. 来首都初次就医的感受
  6. Python并发与并行的新手指南
  7. 【转】win32 的DLL中创建windows窗口
  8. html协商缓存没起作用,用了CDN缓存,就会跳过强缓存和协商缓存吗?
  9. Android Developers:使ListView滑动流畅
  10. android oreo_Android Oreo隐式和显式广播接收器
  11. Java单例模式实现(线程安全)
  12. PLAY2.6-SCALA(五) Action的组合、范围的设置以及错误的处理
  13. 微服务esb_深入理解微服务架构:银弹or焦油坑?
  14. 递归算法经典实例python-递归案例python
  15. matlab绘制有夹角的2个平面,matlab求两向量夹角
  16. Unity3D关于VR的Demo(一)
  17. 一篇关于程序员的文章
  18. 最小项标准式和卡诺图化简
  19. 【转】免费进入学术数据库
  20. 安静!听听AI眼中岛国老师的声音~

热门文章

  1. MATLAB教程目录
  2. C++继承机制下的构造函数
  3. 台湾大学林教授libsvm在matlab的安装
  4. 【转】Node.js最新Web技术栈(2015年5月)
  5. table中tr使用toggle不好,选择换一张方式
  6. 使用自定义的按钮替换默认的input type='file'
  7. Windows server 2012 活动目录回收站
  8. .NET中的异步编程(四)- IO完成端口以及FileStream.BeginRead
  9. Lotus Notes基础知识
  10. CSP认证201612-3 权限查询[C++题解]:模拟题、结构体、set、有点复杂