//问题:输入不同的2个数字,在2个函数中,进行相互转换.
#include <iostream>
void Function();void swap1(int x, int y);
void Pointer();void swap2(int *p1, int *p2);
void Reference();void swap3(int &rx, int &ry);
using namespace std;
void main()
{
Function();
Pointer();
Reference();
}
/******************************************************/
/*
首先,我们讨论函数的缺点:
1.参数按值传递
2.返回语句只能返回一个值
这就使得这个问题无法解决,因为函数返回时只能返回一个值,所以要在2个函数中进行相互转换,
就只能在第一个函数中初始化,第二个函数中转换.
*/
void Function()
{
int x=5,y=10;
cout<<“x=”<<x<<” y=”<<y<<endl;
swap1(x,y);
}
void swap1(int x, int y)
{
int temp;
temp=x;
x=y;
y=temp;
cout<<“x=”<<x<<” y=”<<y<<endl<<endl;
}
/*这里体现出函数参数是局部变量,修改这些参数不会影响调用函数中的值,这被称为 按值传递.
这意味着将在函数中创建每个参数的局部副本,这些局部副本与其他局部变量一样.*/
/******************************************************/
/*
有没有什么方法能够解决函数的缺陷呢?
指针和引用为函数提供了好的解决办法.
接下来,介绍使用指针解决问题.
*/
void Pointer()
{
int x=6,y=8;
cout<<“x=”<<x<<” y=”<<y<<endl;
swap2(&x,&y);
cout<<“x=”<<x<<” y=”<<y<<endl<<endl;
}
void swap2(int *p1, int *p2)
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
/*这里*p1和*p2对应的就是x与y的内存地址,所以改变*p1和*p2的值,就等同于改变x与y的值
解决了按值传递的问题.并且在另一个函数中修改了原函数的值,”返回了2个值”*/
/******************************************************/
/*接下来,介绍使用引用解决问题.*/
void Reference()
{
int x=9,y=6;
cout<<“x=”<<x<<” y=”<<y<<endl;
swap3(x,y);
cout<<“x=”<<x<<” y=”<<y<<endl<<endl;
}
void swap3(int &rx, int &ry)
{
int temp;
temp=rx;
rx=ry;
ry=temp;
}
/*这里通过引用,等于为x和y取了个别名,在另一个函数中进行了转换,因而本身在原函数中也会发生改变.
解决了按值传递的问题.并且在另一个函数中修改了原函数的值,”返回了2个值”*/