/*
时间:2013年5月27日23:28:43
功能:调用函数交换两个数
文件名:swap.cpp(c语言不可以:引用传递)
*/
# include "stdio.h"
//值传递
void Exchg1(int x, int y) //定义中的x,y变量被称为Exchg1函数的形式参数
{
int tmp;
tmp = x;
x = y;
y = tmp;
}
//地址传递
void Exchg2(int *px, int *py)
{
int tmp;
tmp = *px;
*px = *py;
*py = tmp;
}
//地址传递,但是错误。
void Exchg3(int *px, int *py)
{
int *tmp;
tmp = px;
px = py;
py = tmp;
}
//引用传递
void Exchg4(int &x, int &y) //注意定义处的形式参数的格式与值传递不同
{
int tmp;
tmp = x;
x = y;
y = tmp;
}
int main()
{
int a,b;
printf("请输入两个数:a和b\n");
scanf("%d%d",&a,&b);
printf("调用第一个函数!!!\n");
Exchg1(a,b);
printf("a = %d,b = %d\n",a,b);
printf("调用第二个函数!!!\n");
Exchg2(&a,&b);
printf("a = %d,b = %d\n",a,b);
printf("调用第三个函数!!!\n");//并没有交换原来的值。
Exchg3(&a,&b);
printf("a = %d,b = %d\n",a,b);
printf("调用第四个函数!!!\n");
Exchg4(a,b); //这里调用方式与值传递一样
printf("a = %d,b = %d\n",a,b);
//注意:连续调用时:变的值又变过来了。
return 0;
}
/*
1 *****************
为了说明这个问题,我先给出一个代码:
int a=4;
int x;
x=a;
x=x+3;
看好了没,现在我问你:最终a值是多少,x值是多少?
(a==4 x==7)
在这个代码中,你要明白一个东西:虽然a值赋给了x,但是a变量并不是x变量哦。
我们对x任何的修改,都不会改变a变量,虽然简单,并且一看就理所当然。
被调函数的变量,在调用之后就它的内存就释放了,所以不会改变。
2***********************
遥控改变a,b的值。当a的地址传递给pa时,*pa值的
改变a的值也发生改变,被*pa的新值所覆盖。形参和
实参共用同一段存贮空间,如果形参数组中元素的值发生变化,
实参数组中元素的值也同时发生变化。
就如:张三(小名:小三子),你表扬了张三,小三子也受到了表扬,
你表扬小三子,张三同样会受到表扬。
3***************
因为pa,pb地址的值的改变,a,b并没有受到影响。
这是我的第一篇技术日志,不当之处请 大家批评指正。
*/