/*
*Copyright(c++)2016,烟台大学计算机与控制工程学院
*All rights reserved.
*文件名称:cpp1.cpp
作者:王华慧
完成日期:2016年09月07日
版本号:v1.0
*
*问题描述::用C语言中传值和传地址。在C++中使用引用方式。
通过本项目,确认自己已经掌握了这三种方式的原理,为后续学习做好准备。
*输入描述:两个整数
*程序输出:交换后的两个数
*/
1.传值
#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;
}
运行结果
2.传地址
#include<iostream>
using namespace std;
void myswap(int *p1, int *p2)
{
int t;
t=*p1;
*p1=*p2;
*p2=t;
}
int main()
{
int a,b;
cout<<"请输入待交换的两个整数:";
cin>>a>>b;
myswap(&a,&b);
cout<<"调用函数交换后的结果是:"<<a<<" "<<b;
return 0;
}
运行结果
3.引用
#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;
}
运行结果
总结:
第一种传值没有成功交换,原因在于在函数调用时创建的x,y变量为局部变量,myswap函数体中只对x,y进行了交换并未对a,b本身进行交换。而x,y在调用结束后被释放了。故不能成功交换。
第二种传地址交换成功,函数使用了指针变量做函数的形参,传递的是a,b两变量的地址。在函数体中是对两地址所指向的变量进行了交换,所以交换了a,b两变量的值,交换成功。
第三种引用交换成功,所谓引用例如int &a=b,代表的是a是b的别名,a与b占用的是同一个存储空间,也就是说a和b的所指向的东西是相同的。函数形参的x,y实际上就是a和b。在函数体中对x,y进行交换实际上就是对a,b进行了交换。故交换成功。
学习心得:
通过比较 C/C++语言中函数参数传递的三种方式,了解了C++语言中函数参数传递的实质,
在队长的指导下复习巩固了以前所学的知识,理解了这三种方式。对于形参和实参的掌握更加牢固了。