6.4.2 以"引用传递"方式向函数传递参数(2)
3.在main()函数里,把swap()函数调用改成下面这样:
- swap (myNum1, myNum2);
因为swap ()函数将以"引用传递"方式获得输入参数,我们不需要再使用变量的地址调用它了。
4.修改swap ()函数的函数体定义,让它与它的原型相一致。
- void swap (int &first, int &second) {
5.在swap ()函数里,把所有的指针引用都去掉。
- temp = first;
- first = second;
- second = temp;
这个办法的另一个好处是:在函数里无需使用"取地址"操作符就可以存取有关的值。
6.把这个文件保存为swap2.cpp,然后编译并运行这个程序(如图6-24所示)。
|
图6-24 这个程序的运行情况与以前完全一样, 但向swap ()函数传递参数值的方式从 "地址传递"变成了"引用传递" |
"提示
如果在定义某个函数的时候让它以"引用传递"方式获得输入参数,就不能再把具体的参数值本身直接传递给它。如下所示的函数调用无法工作:
- changeVar(20, 90);
无论何时何地,都可以创建一个引用变量,其并不仅限于充当某个函数的输入参数。比如:
- int n1 = 10;
- int &n2 = n1;
现在,n1和n2指向同一个内存块,利用它们当中任何一个进行的修改都会影响到另一个。
在定义函数时,还可以让它以"引用传递"方式而不是以"值传递"方式返回:
- int &myFunction();
除了可以改变有关变量的值,"引用传递"方式的另一个好处是它的开销相对要小一些:因为不需要在函数里创建临时变量来容纳那些值,程序的内存占用量当然会小一些。
如果想获得"引用传递"方式带来的性能改善,但不想改变某个变量的值,可以把相应的输入参数定义为一个常量:
- void myFunc (const int &myNum);
通过这样定义的函数,可以把具体的参数值直接传递给它:
- myFunc(7);
类型别名和枚举
本章最后简要地介绍两个概念。第一个是typedef保留字,使用它可以为一个类型定义创建一个别名。比如,如果你不喜欢使用int *来创建整数指针,可以像下面这样定义一个类型别名:
- typedef int * intPointer;
在此之后,你就可以像下面这样来定义整数指针了:
- intPointer myVar1;
在C语言里,typedef保留字通常与结构搭配使用(在C语言里创建一个结构类型的变量往往需要打很多字),但typedef保留字其实可以用来为任何一种类型定义一个别名。它的基本语法是:
- typedef typeName newTypeName;
第二个概念是enum类型;enum是enumeration(枚举)简写。enum保留字用来创建一个可取值列表:
- enum enumName {possible values};
- enum weekdays {Monday, Tuesday, Wednesday, Thursday, Friday};
在定义了一个枚举类型之后,可以像下面这样创建该类型的变量:
- weekdays today;
也可以像下面这样对它进行赋值:
- today = Tuesday;
注意,这里不需要使用引号,因为枚举值不是字符串。(编译器会按照各个枚举值在定义时出现的先后顺序把它们与0~n-1的整数(n是枚举值的总个数)分别关联起来。使用枚举类型好处主要有两个:其一,它们对变量的可取值加以限制;其二,它们可以用做switch条件语句的case标号--字符串是不能这样用的。
【责任编辑:
云霞 TEL:(010)68476606】