数据结构上机实践第二周项目1

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

  C语言提供了两种函数参数传递的方式:传值和传地址。在C++中,又拓展了引用方式。通过本项目,确认自己已经掌握了这三种方式的原理,为后续学习做好准备。

       主函数代码如下: 

[cpp]  view plain  copy
  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. }  
      根据以下三种myswap函数对横线处填充内容进行修改

方式 1:  

[cpp]  view plain  copy
  1. //(1)传值  
  2. void myswap(int x, int y)  
  3. {  
  4.     int t;  
  5.     t=x;  
  6.     x=y;  
  7.     y=t;  
  8. }  
在myswap函数中 整型变量x和y为形式参数,其值由主函数中调用次函数的实参传递,调用函数时,为x开辟内存空间,为y开辟内存空间,但是实参a,b与形参x,y都为独立的内存空间,调用myswap函数后,调换的是x与y的值,x与y的内存空间在myswap函数结束时释放空间,并不能使a,b的值调换,所以这种方式不能在此题的条件下不能完成主函数中a与b的调换,输出结果仍未原结果。

方式 2:  

[cpp]  view plain  copy
  1. //(2)传地址  
  2. void myswap(int *p1, int *p2)  
  3. {  
  4.     int  t;  
  5.     t=*p1;  
  6.     *p1=*p2;  
  7.     *p2=t;  
  8. }  
这种方式下,myswap函数的形参使两个整型指针变量,在此函数结束后虽然指针变量会释放,但是可以改变指针变量所指向的变量,所以,主函数可修改为     
[cpp]  view plain  copy
  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. }  
通过主函数传递a的地址和b的地址给myswap函数的p1,p2,通过改变指针所指向的变量(a,b)来调换a,b的值。

运行结果:


方式 3:     

[cpp]  view plain  copy
  1. //(3)引用作形参  
  2. void myswap(int &x, int &y)  
  3. {  
  4.     int t;  
  5.     t=x;  
  6.     x=y;  
  7.     y=t;  
  8. }  
在这个myswap函数中,形式参数改为了int &x,int &y,即为与主函数传递的实参共用一块内存空间,还可以说x,y是变量a,b的别名,所以主函数中只需要将变量a,b传递给myswap函数即可。

修改主函数为:    

[cpp]  view plain  copy
  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. }  
运行结果:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值