能深入的讲一个下这个指针交换。

有以下程序         

#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);
 
}