设为首页 加入收藏

TOP

6.4.2 以"引用传递"方式向函数传递参数(2)
2013-10-07 00:48:33 来源: 作者: 【 】 浏览:59
Tags:6.4.2 " 引用 传递 方式 函数 参数

6.4.2 以"引用传递"方式向函数传递参数(2)

3.在main()函数里,把swap()函数调用改成下面这样:

  1. swap (myNum1, myNum2); 

因为swap ()函数将以"引用传递"方式获得输入参数,我们不需要再使用变量的地址调用它了。

4.修改swap ()函数的函数体定义,让它与它的原型相一致。

  1. void swap (int &first, int &second) { 

5.在swap ()函数里,把所有的指针引用都去掉。

  1. temp = first;  
  2. first = second;  
  3. second = temp; 

这个办法的另一个好处是:在函数里无需使用"取地址"操作符就可以存取有关的值。

6.把这个文件保存为swap2.cpp,然后编译并运行这个程序(如图6-24所示)。

 
图6-24 这个程序的运行情况与以前完全一样,
但向swap ()函数传递参数值的方式从
"地址传递"变成了"引用传递"

"提示

如果在定义某个函数的时候让它以"引用传递"方式获得输入参数,就不能再把具体的参数值本身直接传递给它。如下所示的函数调用无法工作:

  1. changeVar(20, 90); 

无论何时何地,都可以创建一个引用变量,其并不仅限于充当某个函数的输入参数。比如:

  1. int n1 = 10;  
  2. int &n2 = n1; 

现在,n1和n2指向同一个内存块,利用它们当中任何一个进行的修改都会影响到另一个。

在定义函数时,还可以让它以"引用传递"方式而不是以"值传递"方式返回:

  1. int &myFunction(); 

除了可以改变有关变量的值,"引用传递"方式的另一个好处是它的开销相对要小一些:因为不需要在函数里创建临时变量来容纳那些值,程序的内存占用量当然会小一些。

如果想获得"引用传递"方式带来的性能改善,但不想改变某个变量的值,可以把相应的输入参数定义为一个常量:

  1. void myFunc (const int &myNum); 

通过这样定义的函数,可以把具体的参数值直接传递给它:

  1. myFunc(7); 

类型别名和枚举

本章最后简要地介绍两个概念。第一个是typedef保留字,使用它可以为一个类型定义创建一个别名。比如,如果你不喜欢使用int *来创建整数指针,可以像下面这样定义一个类型别名:

  1. typedef int * intPointer; 

在此之后,你就可以像下面这样来定义整数指针了:

  1. intPointer myVar1; 

C语言里,typedef保留字通常与结构搭配使用(在C语言里创建一个结构类型的变量往往需要打很多字),但typedef保留字其实可以用来为任何一种类型定义一个别名。它的基本语法是:

  1. typedef typeName newTypeName; 

第二个概念是enum类型;enum是enumeration(枚举)简写。enum保留字用来创建一个可取值列表:

  1. enum enumName {possible values};  
  2. enum weekdays {Monday, Tuesday, Wednesday, Thursday, Friday}; 

在定义了一个枚举类型之后,可以像下面这样创建该类型的变量:

  1. weekdays today; 

也可以像下面这样对它进行赋值:

  1. today = Tuesday; 

注意,这里不需要使用引号,因为枚举值不是字符串。(编译器会按照各个枚举值在定义时出现的先后顺序把它们与0~n-1的整数(n是枚举值的总个数)分别关联起来。使用枚举类型好处主要有两个:其一,它们对变量的可取值加以限制;其二,它们可以用做switch条件语句的case标号--字符串是不能这样用的。

【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇6.2.5 指针和数组(2) 下一篇6.4.2 以"引用传递"方..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: