练英语听力记录片:这段代码怎么看都应该输出63,可是为什么会输出36呢?(C语言)

来源:百度文库 编辑:高考问答 时间:2024/04/29 23:14:16
void fun(int *a,int *b)
{
int *k;
k=a;a=b;b=k;
}
main()
{
int a=3,b=6,*x=&a,*y=&b;
fun(x,y);
printf("%d%d",a,b);
}
可是,x和y不就是a和b的地址吗?有什么不行的?解释一下好吗?你这样回答我根本就不明白。

这样:
void fun(int *a,int *b)
{
int k;
k=*a;*a=*b;*b=k;
}
main()
{
int a=3,b=6,*x=&a,*y=&b;
fun(x,y);
printf("%d%d",a,b);
}

形参里的int *a,int *b是指参数是一个指向整型的指针,调用的时候就要使用&a,&b来取得a、b的地址。
附加:你的函数调用没有错,x,y是个整型地址,但是函数内容错了。
void fun(int *a,int *b)
{
int *k;
k=a;a=b;b=k;
}
你在fun里面改变了指针a中保存的地址,并不是改变了a保存的地址所保存的内容,即你改变的是指针的值,而不是指针指向的值,同样的道理,形参不改变实参,所以修改的结果在函数调用结束后是无效的。
即向fun传递一个指针,你能改变的只是这个指针指向的内容,并不是指针本身,如果你要改变指针本身,要传递的参数就要是指针的指针(int**)

看楼上的