#include<stdio.h> void fun(int*a,int*b) {int*c; c=a;a=b;b=c;} main() {int x=3,y=5,*p=&x,*q=&y;

fun(p,q);printf("%d,%d,",*p,*q);
fun(&x,&y);printf("%d,%d\n",*p,*q);}输出结果不应该是5,3,5,3么?

这个程序的结果是:3,5,3,5
我帮你“缕缕”吧。调用fun函数时,是将p和q的值(x和y的地址)传给了a和b。注意,这里p的值和q的值传递过去了,p和q的值会变吗?不会。所以p和q仍然分别指向x和y。再回到fun函数中,可以看出,a和b的值(x和y的地址)是交换了,也即是说a原本指向x,现在指向了y,对应的b改为指向x。但这只能说a和b间有变化。会影响到x和y吗?也不会。所以fun函数其实对x,y,p,q没有产生任何的影响,当然结果就应该是3,5,3,5了。希望你看过之后可以理解清楚。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-22
p和q是指针,而fun函数里面作为桥梁的不应该是指针,如要想实现应该传递p q的地址。
就像:fun(int a,int b)
{
int temp;
temp=a;
a=b;
b=temp;
}

void main()
{
int x = 1,y = 2;
fun(x,y);

printf("%d%d",x,y);
}
和这个程序的错误类似!
上面的程序应改为:fun(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}

void main()
{
int x = 1,y = 2;
fun(&x,&y);

printf("%d%d",x,y);
}
说白了就是temp a b 不应该是同一级别!
相似回答