#include "stdio.h"
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);
}
这个输出结果是3,6
我个人认为是 6,3 但是我知道我错了
可是我不明白
函数fun()里面应该是把这两个数交换了啊 难道他们没有交换 如果没有交换 是为什么啊
请高手指教
#include "stdio.h"
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);
}
这个输出结果是3,6
我个人认为是 6,3 但是我知道我错了
可是我不明白
函数fun()里面应该是把这两个数交换了啊 难道他们没有交换 如果没有交换 是为什么啊
请高手指教
int *k;
k=a;a=b;b=k;
后,堆栈中对应那两个参数的位置上的值交换了,但这个改变仅仅局限在堆栈内,当fun执行完毕后,堆栈内的那两个参数被丢弃,最终main中的变量a和b并没有任何改变。
int k;
k=*a;*a=*b;*b=k;
看看区别,我们是利用形参a b得到他们指向的值,不是修改它们本身