`
ErinToJerry
  • 浏览: 55470 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
社区版块
存档分类
最新评论

C++中引用变量类型可用以扩充函数传递数据的功能

阅读更多

引用的作用是给一个变量起一个别名,例如有一个变量a,想给他起一个别名b,可以写成:int a;    int   &b=a;        

这样声明后,代表a和b就是同一变量单元,而&不是代表取地址符号,而是引用声明符,说明定义了b可并没有为它另开辟内存单元,b和a就是同一变量。

 

 

 

 

先看一个例子。

 

 

#include "stdafx.h"
#include <iostream>

using namespace std;

//注意形式参数
void swap(int a,int b)
{
	int temp;
	temp=a;
	a=b;
	b=temp;
}

int main(int argc, char* argv[])
{
	int i=3,j=5;
	swap(i,j);
	cout<<"i="<<i<<endl;
	cout<<"j="<<j<<endl;
	return 0;
}

 

结果如图:

可以看出虽然我们在main函数中调用了swap函数,但是i,j的值并未发生改变。

为什么呢?因为普通的函数过程调用,只有实际参数向形式参数传值,而形式参数无法改变实际参数的值。对于普通的函数调用,主调函数接受的来自被调函数的信息,最多只是被调函数的返回值。即被调函数向主调函数最多只能传递1个数据。

上面的例子中,被调函数中,形参a,b本来是3,5,后来变为5,3。但是它们无法让实际参数i,j知道这些改变,所以i,j的值并未发生改变。

 

我们只讲swap函数的形式参数改变一下。

    void swap(int a,int b);

改为

    void swap(int& a,int &b);

这样就可以使得i,j变为5,3。输出如下:

 


 

下面来讲解一下这样修改的原理。

 

 

函数调用:当需要在一个函数(称为主调函数)中使用另一个函数(称为被调函数)实现的功能时,便以函数名字进行调用,成为函数调用。被调函数间同主调函数交换信息(有时候被调函数不需要向主调函数传递信息,比如被调函数中只有cout语句)的方法有2种:一种是由被调函数把返回值返回给主调函数,另一种是通过参数带回信息。函数调用时实参和形参间交换信息的方法有传值调用和引用调用两种。

1)传值调用CallByValue:函数调用时以实参向形参传递相应类型的值。(这种方式下形式参数不能向实际参数传递信息!)

2)引用调用CallByReference:当形参为引用类型时,函数中对形参的访问和修改实际上就是对相应的实参的访问和修改

 

然后说说引用存在的价值,引用的出现主要是把它作为函数参数,以扩充函数传递数据的功能。用传递变量别名的方法实现函数传递数据。

 

 

  • 大小: 7.6 KB
  • 大小: 8.8 KB
1
0
分享到:
评论

相关推荐

    C++编程中将引用类型作为函数参数的方法指南

    C++之所以增加引用类型, 主要是把它作为函数参数,以扩充函数传递数据的功能。 到目前为止我们介绍过函数参数传递的两种情况。 1) 将变量名作为实参和形参 这时传给形参的是变量的值,传递是单向的。如果在执行函数...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    6.5.1 用函数指针变量调用函数 6.5.2 用指向函数的指针作函数参数 6.6 返回指针值的函数 6.7 指针数组和指向指针的指针 6.7.1 指针数组的概念 6.7.2 指向指针的指针 6.8 有关指针的数据类型和指针运算的小结 6.8.1 ...

    c++将引用或者是指针作为函数参数实现实参的运算

    C++增加引用类型, 主要是把它作为函数参数,以扩充函数传递数据的功能,较指针参数来得更加安全直观。将引用作为参数传递的时候,实参初始化形参的时候不分配内存空间,也不调用拷贝构造函数,因此更加能够提高运算的...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar )

    6.5.1 用函数指针变量调用函数 6.5.2 用指向函数的指针作函数参数 6.6 返回指针值的函数 6.7 指针数组和指向指针的指针 6.7.1 指针数组的概念 6.7.2 指向指针的指针 6.8 有关指针的数据类型和指针运算的小结 6.8.1 ...

    Visual C++ 2005入门经典.part08.rar (整理并添加所有书签)

    5.3.3 函数中的静态变量 5.4 递归函数调用 5.5 C++/CLI编程 5.5.1 接受数量可变实参的函数 5.5.2 main()的实参 5.6 小结 5.7 练习 第6章 程序结构(2) 6.1 函数指针 6.1.1 声明函数指针 6.1.2 函数指针作为实参 6.1.3...

    Visual C++ 2005入门经典.part04.rar (整理并添加所有书签)

    5.3.3 函数中的静态变量 5.4 递归函数调用 5.5 C++/CLI编程 5.5.1 接受数量可变实参的函数 5.5.2 main()的实参 5.6 小结 5.7 练习 第6章 程序结构(2) 6.1 函数指针 6.1.1 声明函数指针 6.1.2 函数指针作为实参 6.1.3...

    Visual C++ 2005入门经典.part05.rar (整理并添加所有书签)

    5.3.3 函数中的静态变量 5.4 递归函数调用 5.5 C++/CLI编程 5.5.1 接受数量可变实参的函数 5.5.2 main()的实参 5.6 小结 5.7 练习 第6章 程序结构(2) 6.1 函数指针 6.1.1 声明函数指针 6.1.2 函数指针作为实参 6.1.3...

    数据结构算法与应用(C++语言描述).rar

    8.9 抽象数据类型及类的扩充 263 8.9.1 输出 263 8.9.2 删除 264 8.9.3 计算高度 264 8.9.4 统计节点数 265 8.10 应用 265 8.10.1 设置信号放大器 265 8.10.2 在线等价类 268 8.11 参考及推荐读物 275 第9章 优先...

    数据结构与算法:C++描述

    本书在简要回顾了基本的C++ 程序设计概念的基础上,全面系统地介绍了队列、堆栈、树、图等基本数据结构,以及贪婪算法、分而治之算法、分枝定界算法等多种算法设计方法,为数据结构与算法的继续学习和研究奠定了一...

    Visual C++ 2005入门经典.part07.rar (整理并添加所有书签)

    5.3.3 函数中的静态变量 5.4 递归函数调用 5.5 C++/CLI编程 5.5.1 接受数量可变实参的函数 5.5.2 main()的实参 5.6 小结 5.7 练习 第6章 程序结构(2) 6.1 函数指针 6.1.1 声明函数指针 6.1.2 函数指针作为实参 6.1.3...

    Visual C++ 2005入门经典.part09.rar (整理并添加所有书签)

    5.3.3 函数中的静态变量 5.4 递归函数调用 5.5 C++/CLI编程 5.5.1 接受数量可变实参的函数 5.5.2 main()的实参 5.6 小结 5.7 练习 第6章 程序结构(2) 6.1 函数指针 6.1.1 声明函数指针 6.1.2 函数指针作为实参 6.1.3...

    Visual C++ 2005入门经典.part06.rar (整理并添加所有书签)

    5.3.3 函数中的静态变量 5.4 递归函数调用 5.5 C++/CLI编程 5.5.1 接受数量可变实参的函数 5.5.2 main()的实参 5.6 小结 5.7 练习 第6章 程序结构(2) 6.1 函数指针 6.1.1 声明函数指针 6.1.2 函数指针作为实参 6.1.3...

    数据结构C++描述

    数据结构C++描述 目 录 译者序 前言 第一部分 预备知识 第1章 C++程序设计 1 1.1 引言 1 1.2 函数与参数 2 1.2.1 传值参数 2 1.2.2 模板函数 3 1.2.3 引用参数 3 1.2.4 常量引用参数 4 1.2.5 返回值 4 1.2.6 递归...

    数据结构算法与应用-C++语言描述

    本书在简要回顾了基本的C++ 程序设计概念的基础上,全面系统地介绍了队列、堆栈、树、图等基本数据结构,以及贪婪算法、分而治之算法、分枝定界算法等多种算法设计方法,为数据结构与算法的继续学习和研究奠定了一...

    数据结构、算法与应用:C++语言描述(原书第2版)第二部分

    6.1.4 抽象数据类型linearList的扩充 6.1.5 类extendedChain 6.1.6 性能测量 6.2 循环链表和头节点 6.3 双向链表 6.4 链表用到的词汇表 6.5 应用 6.5.1 箱子排序 6.5.2 基数排序 6.5.3 凸包 6.5.4 并查集 第7章 数组...

    Visual C++ 2005入门经典--源代码及课后练习答案

    5.3.3 函数中的静态变量 236 5.4 递归函数调用 239 5.5 C++/CLI编程 241 5.5.1 接受数量可变实参的函数 242 5.5.2 main( )的实参 243 5.6 小结 244 5.7 练习 245 第6章 程序结构(2) 246 6.1 函数...

    C++课后答案

    【解答】在 C++中,对结构体做了一个很重要的扩充,即允许结构体包含函数成 员。如此一来,我们可以使用结构体中的数据成员描述对象的属性,使用结构体 中的函数成员描述对象的操作。 2.2 什么是类的接口,什么是类...

    C++中引用的使用总结

    引用时C++对C的一个重要的扩充,引用的作用是给变量起一个别名。 例如: int a; int &b=a;//声明b是a的引用 经过以上的声明,b就成为了a的别名,a和b的地位以及作用都是一样的。 将b声明为a的引用,不需要再为b开辟...

    数据结构大作业C++实现简单的计算器——算术表达式计算(包含实验报告)

    以字符序列的形式从终端输入语法正确的、不含变量的整数表达式。利用运算符优先关系,实现对算术四则混合运算表达式的求值。 【测试数据】 (1)能够判断表达式中的括号是否匹配,测试的表达式中括号不匹配,可以...

Global site tag (gtag.js) - Google Analytics