请问下面的程序怎么a和b的值没有互换啊?关于c语言的

#include<stdio.h>
void fun(int *a,int *b)
{
int *k;
k=a;a=b;b=k;
}
void main()
{
int a=3,b=6,*x=&a,*y=&b;
fun(x,y);
printf("%d %d",a,b);
}
我觉得应该是换了的啊?为什么没有换?

这仅仅是交换了fun()函数的的两个形参的指向,没有交换它们指向的地址保存的值,修改如下:

#include<stdio.h>

void fun(int *a,int *b)
{
int k; //注意这里
k=*a;*a=*b;*b=k;//注意这里
}
void main()
{
int a=3,b=6;//注意这里,x和y没有必要
fun(&a,&b);
printf("%d %d",a,b);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-02
这里仅仅改变了形参指针的指向,没有对实指针的指向的内容进行修改

改为

void fun(int *a,int *b)
{
int k;
k=*a;*a=*b;*b=k;
}追问

哦~只是X指向了B,Y指向了A,但实际上A和B没有互换实值对不对?

追答

可以这么说。。。

追问

但是照你那样说指向互换了,我把输出改为*x,*y,还是输出的3,6啊?你不是说指向变了得嘛

追答

互换的是形参指向内容,不是指针的指向

本回答被提问者和网友采纳
第2个回答  2012-10-02
只是交换了形参指针变量的值,即改变了指针的指向。对实参无任何影响。
第3个回答  2012-10-02
你只是改变了X Y指针的指向,没有改变ab的值
第4个回答  2012-10-02
我怎么觉得你这是将a与b的储存地址转换,而不是转换他们的值啊!!

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网