问题及代码:
- /*
- * Copyright (c)2016,烟台大学计算机与控制工程学院
- * All rights reserved.
- * 文件名称:1.cpp
- * 作 者:陈哲
- * 完成日期:2016年9月7日
- * 版 本 号:v1.0
- * 问题描述:编制三个程序,分别采用函数参数传递的三种方式交换两个数。
- * 输入描述:两个整数
- * 程序输出:交换后的两个数
- */
代码:值传递
- #include<iostream>
- using namespace std;
- void myswap(int x, int y)
- {
- int t;
- t=x;
- x=y;
- y=t;
- }
- int main()
- {
- int a,b;
- cout<<"请输入待交换的两个整数:";
- cin>>a>>b;
- myswap(a,b);
- cout<<"调用函数交换后的结果是:"<<a<<" "<<b;
- return 0;
- }
代码:地址传递
- #include <iostream>
- using namespace std;
- void myswap(int *p1,int *p2)
- {
- int t;
- t=*p1;
- *p1=*p2;
- *p2=t;
- }
- int main()
- {
- int a,b;
- printf("请输入带交换的两个整数:");
- scanf("%d%d",&a,&b);
- myswap(&a,&b);
- printf("调用交换函数后的结果:%d %d\n",a,b);
- return 0;
- }
运行结果:
代码:引用传递
- #include <iostream>
- using namespace std;
- void myswap(int &x,int &y)
- {
- int t;
- t=x;
- x=y;
- y=t;
- }
- int main()
- {
- int a,b;
- printf("请输入带交换的两个整数:");
- scanf("%d%d",&a,&b);
- myswap(a,b);
- printf("调用交换函数后的结果:%d %d\n",a,b);
- return 0;
- }
知识点总结:
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。
学习心得:
通过编写三种函数参数传递方式的代码,让我对这三种方法有了更深的理解,并且可以知道了不成功的原因,再接再厉!