设为首页 加入收藏

TOP

6.4.1 把地址传递给函数(1)
2013-10-07 00:48:24 来源: 作者: 【 】 浏览:55
Tags:6.4.1 地址 递给 函数

6.4.1 把地址传递给函数(1)

绕开"值传递"问题的第一种办法是向函数传递变量的地址而不是它的值。正如你已经了解的那样,要想获得某个变量的地址,只要在它的名字前加上一个"取地址"操作符(&)就行了。于是,如果想把一个地址传递给某个函数,相应的函数调用语句应该是下面这样: 

  1. int main() {  
  2.     int myNum = 20;  
  3.     changeVar(&myNum, 90);  
  4.     // Rest of main(). 

现在,myNum变量的地址将被发送到函数并被赋值给那里的第一个输入参数。因为只有一种数据类型可以用来保存地址,所以第一个输入参数必须是一个指针。又因为指针的类型必须与由它保存其地址的变量的类型相一致,所以changeVar()函数的原型应该是:

  1. void changeVar(int *myVar, int newValue); 

在函数里,当需要改变这个变量的值时,别忘了对指针进行解引用:

  1. void changeVar (int *myVar, int   
  2. newValue) {  
  3.     *myVar = newValue;  

在用这段代码修改test程序之后,你将看到预期的结果(如图6-22所示)。

 
图6-22  把变量的地址(而不是它的值)传递给
changeVar()函数的做法让我们看到了预期的结果:
变量的值被改变了

同样的办法还可以用来解决另一类问题,接下来的示例程序将定义一个函数来交换两个变量的值。这种交换在很多排序算法里都要用到,它只能利用指针和地址来实现。

以"地址传递"方式把值传递给函数

1.在文本编辑器或IDE里创建一个空白的新文本文档(代码清单6-8)。

  1. // swap1.cpp - Script 6.8  
  2. #include <iostream> 

代码清单6-8 这个程序定义了一个函数,该函数以两个变量的地址作为输入参数,其功能是交换那两个变量的值

  1. 1   // swap1.cpp - Script 6.8  
  2. 2     
  3. 3   #include <iostream>  
  4. 4     
  5. 5   // Function prototype.  
  6. 6   // Function takes two arguments.  
  7. 7   // Both arguments are integer pointers.  
  8. 8   // Function returns no values.  
  9. 9   void swap(int *first, int *second);  
  10. 10    
  11. 11  int main() {  
  12. 12    
  13. 13      // Create the variables.  
  14. 14      int myNum1 = 23900;  
  15. 15      int myNum2 = -149;  
  16. 16        
  17. 17      // Print their current values.  
  18. 18      std::cout << "At first, myNum1 is " 
  19. 19      << myNum1 << " and myNum2 is " 
  20. 20      << myNum2 << "\n\n";  
  21. 21    
  22. 22      // Call the function.  
  23. 23      swap(&myNum1, &myNum2);  
  24. 24    
  25. 25      // Print their values again.  
  26. 26      std::cout << "After calling the function, myNum1 is " 
  27. 27      << myNum1 << " and myNum2 is " 
  28. 28      << myNum2 << "\n\n";  
  29. 29    
  30. 30      std::cout << "Press Enter or Return to continue.\n";  
  31. 31      std::cin.get();  
  32. 32      return 0;  
  33. 33            
  34. 34  } // End of the main().  
  35. 35    
  36. 36  // Function definition.  
  37. 37  void swap(int *first, int *second) {  
  38. 38    
  39. 39      // Need a temporary integer.  
  40. 40      int temp;  
  41. 41        
  42. 42      // Assign the value of first to temp.  
  43. 43      temp = *first;  
  44. 44        
  45. 45      // Assign the value of second to first.  
  46. 46      *first = *second;  
  47. 47    
  48. 48      // Assign the original value of first to second.  
  49. 49      *second = temp;  
  50. 50        
  51. 51  } // End of swap(). 

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

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇6.4.1 把地址传递给函数(2) 下一篇6.4 再论用户定义函数

评论

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