1.reference parameter

以下两个函数等效,只调用方式不同:

1>

  1. 1 int reset(int i){
  2. 2 i = 13;
  3. 3 return i;
  4. 4 }
  5. 5
  6. 6 int main ()
  7. 7 {
  8. 8 int j=0;
  9. 9 j = reset(j);
  10. 10 cout<<j<<endl;
  11. 11 system("PAUSE");
  12. 12
  13. 13 return 0;
  14. 14 }

2>

  1. 1 void reset(int &i){
  2. 2 i = 13;
  3. 3 }
  4. 4
  5. 5 int main ()
  6. 6 {
  7. 7 int j;
  8. 8 reset(j);
  9. 9 cout<<j<<endl;
  10. 10 system("PAUSE");
  11. 11
  12. 12 return 0;
  13. 13 }

函数区别,第一个必须要有返回值,第二个则不必.

调用时区别在第9行.

void reset()函数中引用参数 i 只是变量 j 的另一个名称,本质上就是变量 j ,不需要返回值,更改 i 的内容即等效于更改 j 的内容.

2.借引用参数实现一个函数返回多个结果

众所周知,一个函数只能有一个返回值。

但是借由reference parameter,可以实现返回多个结果的效果。

  1. //找出字符第一次出现位置pos,并得出共出现的次数occurs
  2.  
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. string::size_type find_char(const string &s, char c, string::size_type &occurs){
  8. auto ret = s.size();
  9. occurs = ;
  10. for(decltype(ret) i = ; i<s.size(); ++i){
  11. if(s[i]==c){
  12. if(ret == s.size()){
  13. ret = i;
  14. }
  15. ++occurs;
  16. }
  17. }
  18. return ret;
  19. }
  20.  
  21. int main ()
  22. {
  23. string s = "casutxodoihsdfd";
  24. string::size_type occurs= ;
  25. cout<<find_char(s,'d',pos)<<endl;
  26. cout<<occurs<<endl;
  27. system("PAUSE");
  28. return ;
  29. }

输出

  1.  

其中occurs就是作为被引用参数,在调用函数时其值被更改。

【C++】reference parameter-引用参数的更多相关文章

  1. [SoapUI] Reference parameter 引用变量

    Reference parameter in WADL : Endpoint : ${#Project#DomainServer} Resource : {AdvisorID} Reference p ...

  2. 常量函数、常量引用参数、常量引用返回值[C++]

    1. 关于常量引用正像在C语言中使用指针一样,C++中通常使用引用 有一个函数... foo()并且这个函数返回一个引用...... & foo()...., 一个指向位图(Bitmap)的引 ...

  3. 非const引用参数传入不同类型编译不过的理解(拒绝将临时对象绑定为非const的引用的形参是有道理的)

    int f (int & I) { cout<<I<<std::endl; } void main() { long L; f(L); // 编译不过 f((int)L ...

  4. C#的值参数与引用参数

    值参数:在使用值参数时,是把变量的值传给函数,函数中对此变量的任何修改都不影响该变量本身的值. 引用参数:使用引用参数时,在函数中对此变量的修改会影响变量的值. 说简单点,值参数,就是我把身份证复印件 ...

  5. 实例对比剖析c#引用参数的用法

    c#引用参数传递的深入剖析值类型的变量存储数据,而引用类型的变量存储对实际数据的引用.(这一点很重要,明白了之后就能区分开值类型和引用类型的差别) 在参数传递时,值类型是以值的形式传递的(传递的是值, ...

  6. C#方法的六种参数,值参数、引用参数、输出参数、参数数组、命名参数、可选参数

    方法的参数有六种,分别是值参数.引用参数.输出参数.参数数组.命名参数.可选参数. 值参数 值参数是方法的默认类型,通过复制实参的值到形参的方式把数据传递到方法,方法被调用时,系统作两步操作: 在栈中 ...

  7. C#_delegate - 值参数和引用参数

    值参数不能加,引用参数可以. 引用参数是共享的 using System; using System.Collections.Generic; using System.Linq; using Sys ...

  8. SQL Server,Access数据库查询易混点和C#中parameter指定参数长度的优缺点

    在学校的时候就经常做一些网站,所以这次在公司实习,组长第一次给了一个企业的网站还是很快的完成了.中间并没有遇到什么大的问题,但是还是遇到了两个新手非常容易混淆的小问题,所以拿出来跟大家分享一下. 主要 ...

  9. C# 引用参数

    最近经常和同事讨论引用参数的问题,为了搞清楚,查了些资料,其中CLR via C#中讲的比较清楚,整理了下 ----摘自(CLR via C#) 在默认情况下,CLR假设所有的方法参数都是按值传递的. ...

随机推荐

  1. 洛谷P4553 80人环游世界

    题目描述 https://www.luogu.org/problemnew/show/P4553 题解 思路比较显然,把图建出来,一个国家拆成两个点,中间设置上下界,然后跑费用流. 我把源那边的流量也 ...

  2. 【php】php位运算及其高级应用

    我们之前学过逻辑与(&&)      条件1 && 条件2 当两边条件同时成立时候返回1 逻辑或(||)         条件1 || 条件2    当两边条件只要有一 ...

  3. 20165223 week2学习查漏补缺

    标识符.字符集.关键字 基本数据类型 逻辑类型:boolean 常量:true.false 变量:boolean赋值 整数类型:byte.short.long.int 注意long型后缀L Java没 ...

  4. nuxt.js实战之用vue-i18n实现多语言

    一.实现步骤 1.安装vue-i18n并且创建store.js(vuex状态管理)文件 2.创建一个(middleware)中间件,用来管理不同的语言 3.创建不同语言的json文件作为语言包(例如: ...

  5. (转)深入理解Java注解类型(@Annotation)

    背景:在面试时候问过关于注解的问题,工作中也用到过该java的特性,但是也没有深入的了解. 秒懂,Java 注解 (Annotation)你可以这样学 ps:注解最通俗易懂的解释 注解是一系列元数据, ...

  6. Sublime Text3—软件安装、package control插件管理

    一.简介 市面上的编辑器纷繁复杂各有优点,好用的编辑器能让你工作事半功倍,先简单介绍下本文主角Sublime Text编辑器,下面简称Sublime. 1.可用于 Windows.Mac OS X 和 ...

  7. 图像处理之gamma校正

    1 gamma校正背景 在电视和图形监视器中,显像管发生的电子束及其生成的图像亮度并不是随显像管的输入电压线性变化,电子流与输入电压相比是按照指数曲线变化的,输入电压的指数要大于电子束的指数.这说明暗 ...

  8. alias命令使用

    alias 别名 增加别名 alias vi=vim alias api='sudo apt-get install' alias apr='sudo apt-get remove' alias tz ...

  9. python: 反射机制;

    import comma def run(): inp = input('请输入要调用的函数').strip(); if hasattr(comma,inp): fun = getattr(comma ...

  10. day-04(jquery)

    回顾: js: 组成部分: ECMAScript BOM DOM 变量声明 var 变量名=初始化值; 数据类型: 原始类型 Undefined Null String Number Boolean: ...