/*
*Copyright (c) 2014,烟台大学计算机学院
*All rights reserved.
*文件名称:Cpp1.cpp
*作者:孙钰坤
*完成日期:2015年9月11日
*
*问题描述:比较函数参数传递的三种方式
*输入描述:输入a,b的值
*程序输出:输出传递后a,b的值
*/
#include <iostream>
using namespace std;
int main()
{
int a,b;
void myswap1(int x,int y); //对交换函数myswap1的提前声明 (传值)
cout<<"请输入待交换的两个整数:"<<endl;
cin>>a>>b;
myswap1(a,b); // 调用传值的交换函数myswap1
cout<<"调用传值的交换函数后的结果是:"<<endl;
cout<<a<<' '<<b<<endl;
cout<<"请输入待交换的两个整数:"<<endl;
return 0;
}
void myswap1(int x,int y)//交换函数myswap1的具体定义
{
int t;
t=x;
x=y;
y=t;
}
#include <iostream>
using namespace std;
int main()
{
int a,b;
void myswap2(int *p1,int *p2); //对交换函数myswap1的提前声明 (传地址)
cout<<"请输入待交换的两个整数:"<<endl;
cin>>a>>b;
myswap2(&a,&b); // 调用传地址的交换函数myswap2
cout<<"调用传地址的交换函数后的结果是:"<<endl;
cout<<a<<' '<<b<<endl;
return 0;
}
void myswap2(int *p1,int *p2) //交换函数myswap2的具体定义
{
int t;
t=*p1;
*p1=*p2;
*p2=t;
}
#include <iostream>
using namespace std;
int main()
{
int a,b;
cout<<"请输入待交换的两个整数:"<<endl;
void myswap3(int &x,int &y); //对交换函数myswap1的提前声明 (引用作形参)
cin>>a>>b;
myswap3(a,b); // 调用以引用作形参的交换函数myswap2
cout<<"调用以引用作形参的交换函数后的结果是:"<<endl;
cout<<a<<' '<<b<<endl;
return 0;
}
void myswap3(int &x,int &y) //交换函数myswap3的具体定义
{
int t;
t=x;
x=y;
y=t;
}
运行结果:
调用传值交换后的两个数是这样的:
调用传地址交换后的两个数是这样的:
使用引用做形参交换过的两个数是这样的:
总结:
可以发现 使用传值交换过的两个数还是原来的样子,而另外两种交换方法交换过的数值是颠倒的,原因是在用myswap1进行传值交换时,就只是将两个数的数值交换,对a,b本身没有改变,只是在子函数中交换而没有在main函数中交换,所以不能成功的实现两个数的交换。而调用传地址交换的两个数则是直接对地址指向的内容进行交换故而交换成功。
心得:
在这个例题中使用的是C++而不是C,因为C语言基础太差,,有些根本不知道怎么写,,,所以就直接用了最熟悉的方式,抽空一定加紧C语言的学习=。=|||
本文通过三个不同的C++程序示例,展示了函数参数传递的三种常见方式:传值、传地址及引用作为形参,并对比了它们在实际应用中的效果。

被折叠的 条评论
为什么被折叠?



