有以下程序
#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);
}
为什么最后是3 5 3 5
有以下程序
#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);
}
为什么最后是3 5 3 5
首先你的函数形参是指针 第一个调用传过去的是p q指针,。相当于交换了x y的地址。并没有交换 x y 地址值
第二个调用传了x y地址,也是。。交换了地址。没有交换值
两次调用一模一样。参数都是x y地址
交换值应该是 三句交换变量都带*表示地址存的值。。
还有啥不理解的吗
正确的交换
#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\n",*p,*q);
fun(&x,&y);
printf("%d,%d\n",*p,*q);
}