6.4.2 以"引用传递"方式向函数传递参数(1)
正如刚看到的那样,在某些场合,以"地址传递"方式把值传递给函数是必要和唯一的选择。这个办法在C语言和C++(www.cppentry.com)里都可以使用。但正如那些创造和完善C++(www.cppentry.com)语言的高人们想的那样,既然像这样来使用地址是一种很好的思路,让这个概念更加完善岂不是更好?如果事先就知道某个函数只能接受一个地址,能不能按照某种套路来编写有关的代码以便在调用该函数时不需要使用特殊的语法呢?于是,以引用传递方式传递输入参数的概念诞生了。
目的相同,还是把地址传递给函数,但语法可就大不一样了。仍以changeVar()函数为例,它在新思路下的原型变成了下面这样:
- void changeVar(int &myVar, int newValue);
这个函数的第一个输入参数myVar不是一个指针,它是那个将被传递给这个函数的原始变量的一个别名。在changeVar()函数里对这个参数变量进行的任何操作都将反映在changeVar()函数外的那个原始变量身上。这意味着可以在changeVar()函数里用下面这些代码完成和原来一样的任务:
- void changeVar (int &myVar, int newValue) {
- myVar = newValue;
- }
这使得这个函数更容易被调用--只需提供一个变量名:
- int main() {
- int myNum = 20;
- changeVar(myNum, 90);
-
正如你看到的那样,这个函数的功能与原来一样(改变某个变量的值),但它的函数调用语法不像原来那么复杂了。下面,我们将按照这个新思路来改写一下swap程序。
以"引用传递"方式把值传递给函数
1.在文本编辑器或IDE里打开swap1.cpp文件(代码清单6-8)。
2.把swap()函数的原型改成下面这样(代码清单6-9):
- void swap (int &first, int &second);
代码清单6-9 以"引用传递"方式把参数值传递给一个函数是C++(www.cppentry.com)的新增功能,这可以让函数的调用语法更加简明清晰
- 1
- 2
- 3 #include <iostream>
- 4
- 5
- 6
- 7
- 8
- 9 void swap(int &first, int &second);
- 10
- 11 int main() {
- 12
- 13
- 14 int myNum1 = 23900;
- 15 int myNum2 = -149;
- 16
- 17
- 18 std::cout << "At first, myNum1 is "
- 19 << myNum1 << " and myNum2 is "
- 20 << myNum2 << "\n\n";
- 21
- 22
- 23 swap(myNum1, myNum2);
- 24
- 25
- 26 std::cout << "After calling the function, myNum1 is "
- 27 << myNum1 << " and myNum2 is "
- 28 << myNum2 << "\n\n";
- 29
- 30 std::cout << "Press Enter or Return to continue.\n";
- 31 std::cin.get();
- 32 return 0;
- 33
- 34 }
- 35
- 36
- 37 void swap(int &first, int &second) {
- 38
- 39
- 40 int temp;
- 41
- 42
- 43 temp = first;
- 44
- 45
- 46 first = second;
- 47
- 48
- 49 second = temp;
- 50
- 51 }
这个函数的输入参数不再是两个指针,而是两个引用(别名)。
【责任编辑:
云霞 TEL:(010)68476606】