设为首页 加入收藏

TOP

6.4 再论用户定义函数
2013-10-07 00:48:22 来源: 作者: 【 】 浏览:56
Tags:6.4 用户 定义 函数

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. 1   // test.cpp - Script 6.7  
  2. 2     
  3. 3   #include <iostream>  
  4. 4     
  5. 5   // Function prototype.  
  6. 6   // Function takes two arguments.  
  7. 7   // Function returns no values.  
  8. 8   void changeVar(int myVar, int newValue);  
  9. 9     
  10. 10  int main() {  
  11. 11    
  12. 12      // Create a new variable.  
  13. 13      int myNum = 20;  
  14. 14        
  15. 15      // Print its current value.  
  16. 16      std::cout << "myNum is " 
  17. 17      << myNum << "\n";  
  18. 18    
  19. 19      // Call the function.  
  20. 20      changeVar(myNum, 90);  
  21. 21    
  22. 22      // Print its value again.  
  23. 23      std::cout << "After calling the function, myNum is now " 
  24. 24      << myNum << "\n";  
  25. 25            
  26. 26      return 0;  
  27. 27    
  28. 28  } // End of the main().  
  29. 29    
  30. 30  // Function definition.  
  31. 31  void changeVar(int myVar, int newValue) {  
  32. 32    
  33. 33      // Assign the new value to the variable.  
  34. 34      myVar = newValue;  
  35. 35        
  36. 36  } // End of changeVar(). 
图6-21 changeVar()函数并没有真正改变myNum变量的值(参阅代码清单6-7)
出现这种情况的原因是:在调用changeVar()函数时,程序只是把main()函数中的myNum变量的值赋值给了changeVar()函数中的myVar变量,它们是两个不同的变量。事实上,changeVar()函数完全不知道在main()函数里还存在一个myNum变量,甚至连它的名字都不知道。这就引出了一个问题:怎样才能在不使用某个变量的名字的情况下改变这个变量的值呢?这个问题答案是(你们想到了吗?)通过使用地址和指针!

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

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇6.4.1 把地址传递给函数(1) 下一篇6.3 结构(3)

评论

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