/*

时间: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并没有受到影响。


这是我的第一篇技术日志,不当之处请 大家批评指正。

*/