原因如下:
X,Y的确是地址,也将a,b地址传递给了函数fun。
但是函数内部的作用是将参数a和b的内容交换,a和b的内容是main函数定义中x,y的值(也就是a,b的地址,注意main函数中a,b和形参定义的a,b是2个不同的定义,也就是说main中的a,b和fun中的a,b是2组不同的内存块。)接着说,fun的形参a,b的值虽然交换了,但是函数调用完以后,形参a,b的值都被free了,根本没有影响到main中a,b的值(刚才说了2个a,b都是不相同的)。
如果你对我上面的解释还感觉很茫然了,我将你的程序写在下面和我的程序对比
,这样可以或许对你有点帮助:
#include"stdio.h"
void fun(int*a,int*b) //这时候的内存块: a=1 地址2000
{int *k; b=2 地址2004
k=a;a=b;b=k x=2000 地址2008
y=2004 地址2012
形参变量(和main中d的a,b不一样) a=2000 地址2016
b=2004 地址2020
然后函数起作用后:形参a=2004 地址2016
b=2000 地址2020
最后释放 a,b,main函数中的a,b并没有因此改变
}
main()//程序从这里开始运行
{inta=1,b=2,*x=&a,*y=&b;// 这时候内存块是这样的: a=1 地址2000
fun(x,y);//调用函数fun ,请你看条用fun的时候的内存块 b=2 地址 2004
printf("%d%d",a,b); x=2000 地址2008
} y=2004 地址2012
下面是正确的做法:
正确的做法:
#include"stdio.h"
#include "stdlib.h"
void fun(int*a,int*b)
{int k;
k=*a;*a=*b;*b=k;
}
int main()
{int a=1,b=2,*x=&a,*y=&b;
fun(x,y);
printf("%d%d",a,b);
system("pause");
}
这样就改变了a,b的值
温馨提示:答案为网友推荐,仅供参考