C/C++语言中函数参数传递的三种方式

  1. //*Copyright  (c)2017,烟台大学计算机与控制工程学院*      
  2. //*All rights reservrd.*      
  3. //*文件名称 :test.cpp*      
  4. //*作者:张文畅*   
  5. //*完成时间:2017年9月7日*       
  6. //*版本号:v1.0*   
  7. //*问题描述:用于交换的主函数*      
  8. //*输入描述:输入要交换的两个数*      
  9. //*程序输出:与输入值顺序相反的两个数*     
//*Copyright  (c)2017,烟台大学计算机与控制工程学院*   
//*All rights reservrd.*   
//*文件名称 :test.cpp*   
//*作者:田长航*
//*完成时间:2017年9月7日*    
//*版本号:v1.0*
//*问题描述:用于交换的主函数*   
//*输入描述:输入要交换的两个数*   
//*程序输出:与输入值顺序相反的两个数*   
[cpp] view plain copy print ?
  1. int main()  
  2. {  
  3.     int a, b;  
  4.     printf("请输入待交换的两个整数:");  
  5.     scanf("%d %d", &a, &b);  
  6.     __________________;  //分三个程序,分别写上调用myswap的合适形式   
  7.     printf("调用交换函数后的结果是:%d 和 %d\n", a, b);  
  8.     return 0;  
  9. }  
int main()
{
    int a, b;
    printf("请输入待交换的两个整数:");
    scanf("%d %d", &a, &b);
    __________________;  //分三个程序,分别写上调用myswap的合适形式
    printf("调用交换函数后的结果是:%d 和 %d\n", a, b);
    return 0;
}
      根据以下三种myswap函数对横线处填充内容进行修改

方式 1:

[cpp] view plain copy print ?
  1. //*Copyright  (c)2017,烟台大学计算机与控制工程学院*      
  2. //*All rights reservrd.*      
  3. //*文件名称 :test.cpp*      
  4. //*作者:田长航*   
  5. //*完成时间:2017年9月7日*       
  6. //*版本号:v1.0*   
  7. //*问题描述:传值的方法交换值函数*      
  8. //*输入描述:无*      
  9. //*程序输出:无*     
//*Copyright  (c)2017,烟台大学计算机与控制工程学院*   
//*All rights reservrd.*   
//*文件名称 :test.cpp*   
//*作者:田长航*
//*完成时间:2017年9月7日*    
//*版本号:v1.0*
//*问题描述:传值的方法交换值函数*   
//*输入描述:无*   
//*程序输出:无*   
[cpp] view plain copy print ?
  1. //(1)传值   
  2. void myswap(int x, int y)  
  3. {  
  4.     int t;  
  5.     t=x;  
  6.     x=y;  
  7.     y=t;  
  8. }  
//(1)传值
void myswap(int x, int y)
{
    int t;
    t=x;
    x=y;
    y=t;
}
在myswap函数中 整型变量x和y为形式参数,其值由主函数中调用次函数的实参传递,调用函数时,为x开辟内存空间,为y开辟内存空间,但是实参a,b与形参x,y都为独立的内存空间,调用myswap函数后,调换的是x与y的值,x与y的内存空间在myswap函数结束时释放空间,并不能使a,b的值调换,所以这种方式不能在此题的条件下不能完成主函数中a与b的调换,输出结果仍未原结果。

方式 2:

[cpp] view plain copy print ?
  1. //*Copyright  (c)2017,烟台大学计算机与控制工程学院*      
  2. //*All rights reservrd.*      
  3. //*文件名称 :test.cpp*      
  4. //*作者:田长航*   
  5. //*完成时间:2017年9月7日*       
  6. //*版本号:v1.0*   
  7. //*问题描述:传地址的方法交换值函数*      
  8. //*输入描述:无*      
  9. //*程序输出:无*     
//*Copyright  (c)2017,烟台大学计算机与控制工程学院*   
//*All rights reservrd.*   
//*文件名称 :test.cpp*   
//*作者:田长航*
//*完成时间:2017年9月7日*    
//*版本号:v1.0*
//*问题描述:传地址的方法交换值函数*   
//*输入描述:无*   
//*程序输出:无*   
[cpp] view plain copy print ?
  1. //(2)传地址   
  2. void myswap(int *p1, int *p2)  
  3. {  
  4.     int  t;  
  5.     t=*p1;  
  6.     *p1=*p2;  
  7.     *p2=t;  
  8. }  
//(2)传地址
void myswap(int *p1, int *p2)
{
    int  t;
    t=*p1;
    *p1=*p2;
    *p2=t;
}
这种方式下,myswap函数的形参使两个整型指针变量,在此函数结束后虽然指针变量会释放,但是可以改变指针变量所指向的变量,所以,主函数可修改为

[cpp] view plain copy print ?
  1. //*Copyright  (c)2017,烟台大学计算机与控制工程学院*      
  2. //*All rights reservrd.*      
  3. //*文件名称 :test.cpp*      
  4. //*作者:田长航*   
  5. //*完成时间:2017年9月7日*       
  6. //*版本号:v1.0*   
  7. //*问题描述:传地址的方法交换值主函数*      
  8. //*输入描述:两个数*      
  9. //*程序输出:反顺序输出两个数*     
//*Copyright  (c)2017,烟台大学计算机与控制工程学院*   
//*All rights reservrd.*   
//*文件名称 :test.cpp*   
//*作者:田长航*
//*完成时间:2017年9月7日*    
//*版本号:v1.0*
//*问题描述:传地址的方法交换值主函数*   
//*输入描述:两个数*   
//*程序输出:反顺序输出两个数*   
[cpp] view plain copy print ?
  1. int main()  
  2. {  
  3.     int a, b;  
  4.     printf("请输入待交换的两个整数:");  
  5.     scanf("%d %d", &a, &b);  
  6.     myswap(&a,&b);  //分三个程序,分别写上调用myswap的合适形式   
  7.     printf("调用交换函数后的结果是:%d 和 %d\n", a, b);  
  8.     return 0;  
  9. }  
int main()
{
    int a, b;
    printf("请输入待交换的两个整数:");
    scanf("%d %d", &a, &b);
    myswap(&a,&b);  //分三个程序,分别写上调用myswap的合适形式
    printf("调用交换函数后的结果是:%d 和 %d\n", a, b);
    return 0;
}
通过主函数传递a的地址和b的地址给myswap函数的p1,p2,通过改变指针所指向的变量(a,b)来调换a,b的值。

运行结果:

C/C++语言中函数参数传递的三种方式_第1张图片

方式 3:

[cpp] view plain copy print ?
  1. //*Copyright  (c)2017,烟台大学计算机与控制工程学院*      
  2. //*All rights reservrd.*      
  3. //*文件名称 :test.cpp*      
  4. //*作者:田长航*   
  5. //*完成时间:2017年9月7日*       
  6. //*版本号:v1.0*   
  7. //*问题描述:引用作形参的方法交换值函数*      
  8. //*输入描述:无*      
  9. //*程序输出:无*     
//*Copyright  (c)2017,烟台大学计算机与控制工程学院*   
//*All rights reservrd.*   
//*文件名称 :test.cpp*   
//*作者:田长航*
//*完成时间:2017年9月7日*    
//*版本号:v1.0*
//*问题描述:引用作形参的方法交换值函数*   
//*输入描述:无*   
//*程序输出:无*   
[cpp] view plain copy print ?
  1. //(3)引用作形参   
  2. void myswap(int &x, int &y)  
  3. {  
  4.     int t;  
  5.     t=x;  
  6.     x=y;  
  7.     y=t;  
  8. }  
//(3)引用作形参
void myswap(int &x, int &y)
{
    int t;
    t=x;
    x=y;
    y=t;
}
在这个myswap函数中,形式参数改为了int &x,int &y,即为与主函数传递的实参共用一块内存空间,还可以说x,y是变量a,b的别名,所以主函数中只需要将变量a,b传递给myswap函数即可。

修改主函数为:

[cpp] view plain copy print ?
  1. //*Copyright  (c)2017,烟台大学计算机与控制工程学院*      
  2. //*All rights reservrd.*      
  3. //*文件名称 :test.cpp*      
  4. //*作者:田长航*   
  5. //*完成时间:2017年9月7日*       
  6. //*版本号:v1.0*   
  7. //*问题描述:引用作形参的方法交换值主函数*      
  8. //*输入描述:两个数*      
  9. //*程序输出:反顺序输出两个数*     
//*Copyright  (c)2017,烟台大学计算机与控制工程学院*   
//*All rights reservrd.*   
//*文件名称 :test.cpp*   
//*作者:田长航*
//*完成时间:2017年9月7日*    
//*版本号:v1.0*
//*问题描述:引用作形参的方法交换值主函数*   
//*输入描述:两个数*   
//*程序输出:反顺序输出两个数*   
[cpp] view plain copy print ?
  1. int main()  
  2. {  
  3.     int a, b;  
  4.     printf("请输入待交换的两个整数:");  
  5.     scanf("%d %d", &a, &b);  
  6.     myswap(a,b);  //分三个程序,分别写上调用myswap的合适形式   
  7.     printf("调用交换函数后的结果是:%d 和 %d\n", a, b);  
  8.     return 0;  
  9. }  
int main()
{
    int a, b;
    printf("请输入待交换的两个整数:");
    scanf("%d %d", &a, &b);
    myswap(a,b);  //分三个程序,分别写上调用myswap的合适形式
    printf("调用交换函数后的结果是:%d 和 %d\n", a, b);
    return 0;
}
运行结果:

C/C++语言中函数参数传递的三种方式_第2张图片







你可能感兴趣的:(C/C++语言中函数参数传递的三种方式)