6.4 再论用户定义函数
现在,你对C++(www.cppentry.com)里一些比较复杂的数据类型已经有了基本的了解,我们再来讨论一些关于用户定义函数的问题。我们曾经在第5章里讨论了用户定义函数,在那里讲解了如何定义函数的原型及其函数体、如何向函数传递输入参数、如何从函数返回一个值,等等。如果你已经仔细阅读过那一章,就应该已经掌握了编写自己的函数所需要的大部分知识,但那些知识还缺少一个重要的组成部分。
在编写个人函数时,你将受到C++(www.cppentry.com)中的一条基本原则的限制:在默认的情况下,变量只能以值传递的方式传递给函数。这句话的意思是:被传递到函数的只是变量的值,永远不会是变量本身。如果运行test.cpp程序(代码清单6-7),它的运行结果很可能不是预期的那样(如图6-21所示)。
代码清单6-7 因为C++(www.cppentry.com)向函数传递输入参数时的具体做法,changeVar()函数的执行结果(如图6-21所示)很可能与预期的不一样
- 1
- 2
- 3 #include <iostream>
- 4
- 5
- 6
- 7
- 8 void changeVar(int myVar, int newValue);
- 9
- 10 int main() {
- 11
- 12
- 13 int myNum = 20;
- 14
- 15
- 16 std::cout << "myNum is "
- 17 << myNum << "\n";
- 18
- 19
- 20 changeVar(myNum, 90);
- 21
- 22
- 23 std::cout << "After calling the function, myNum is now "
- 24 << myNum << "\n";
- 25
- 26 return 0;
- 27
- 28 }
- 29
- 30
- 31 void changeVar(int myVar, int newValue) {
- 32
- 33
- 34 myVar = newValue;
- 35
- 36 }
图6-21 changeVar()函数并没有真正改变myNum变量的值(参阅代码清单6-7)
出现这种情况的原因是:在调用changeVar()函数时,程序只是把main()函数中的myNum变量的值赋值给了changeVar()函数中的myVar变量,它们是两个不同的变量。事实上,changeVar()函数完全不知道在main()函数里还存在一个myNum变量,甚至连它的名字都不知道。这就引出了一个问题:怎样才能在不使用某个变量的名字的情况下改变这个变量的值呢?这个问题答案是(你们想到了吗?)通过使用地址和指针!
【责任编辑:
云霞 TEL:(010)68476606】