第二周项目1--C/C++语言中函数参数传递的三种方式

来源:互联网 发布:复杂网络 计算机 编辑:程序博客网 时间:2024/06/05 21:58

问题及代码:

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. /*  
  2. * Copyright (c)2016,烟台大学计算机与控制工程学院  
  3. * All rights reserved.  
  4. * 文件名称:1.cpp  
  5. * 作    者:陈哲
  6. * 完成日期:2016年9月7日  
  7. * 版 本 号:v1.0  
  8. * 问题描述:编制三个程序,分别采用函数参数传递的三种方式交换两个数。  
  9. * 输入描述:两个整数 
  10. * 程序输出:交换后的两个数 
  11. */   

代码:值传递

  1. #include<iostream>    
  2. using namespace std;    
  3. void myswap(int x, int y)    
  4. {    
  5.     int t;    
  6.     t=x;    
  7.     x=y;    
  8.     y=t;    
  9. }    
  10.     
  11. int main()    
  12. {    
  13.     int a,b;    
  14.     cout<<"请输入待交换的两个整数:";    
  15.         cin>>a>>b;    
  16.      myswap(a,b);    
  17.         cout<<"调用函数交换后的结果是:"<<a<<" "<<b;    
  18.         return 0;    
  19. }    


运行结果:

        


代码:地址传递

  1. #include <iostream>  
  2. using namespace std;    
  3. void myswap(int *p1,int *p2)  
  4. {  
  5.     int t;  
  6.     t=*p1;  
  7.     *p1=*p2;  
  8.     *p2=t;  
  9. }  
  10. int main()  
  11. {  
  12.     int a,b;  
  13.     printf("请输入带交换的两个整数:");  
  14.     scanf("%d%d",&a,&b);  
  15.     myswap(&a,&b);  
  16.     printf("调用交换函数后的结果:%d %d\n",a,b);  
  17.     return 0;  
  18. }  

运行结果:

      


代码:引用传递

  1. #include <iostream>  
  2. using namespace std;  
  3. void myswap(int &x,int &y)  
  4. {  
  5.     int t;  
  6.     t=x;  
  7.     x=y;  
  8.     y=t;  
  9. }  
  10. int main()  
  11. {  
  12.     int a,b;  
  13.     printf("请输入带交换的两个整数:");  
  14.     scanf("%d%d",&a,&b);  
  15.     myswap(a,b);  
  16.     printf("调用交换函数后的结果:%d %d\n",a,b);  
  17.     return 0;  
  18. }  
运行结果:

       

知识点总结:

        1、值传递交换不成功,原因是在主函数中调用myswap()函数,只是将a值赋给x,b值赋给y,交换的只是x和y,a、b的值并         未改变,仍是原来的值。实参到形参是单向         传递,函数调用后,形参被释放,实参没有调换位置。

      2、地址传递交换成功,在调用myswap()函数时,a的地址传给p1,b的地址传给p2,即p1=&a,p2=&b,交换p1和p2,也就是               交换a和b。

      3、引用传递交换成功,在调用myswap()函数时,x和y分别引用了a和b两个变量,就可以用函数引用实参ab。

学习心得:

     通过编写三种函数参数传递方式的代码,让我对这三种方法有了更深的理解,并且可以知道了不成功的原因,再接再厉!

 



   



0 0