值传递跟地址传递有些晕了

#include"stdio.h" void main() { void swap(int *x,int *y); int a=10,b=20; printf("a=%d,b=%d\n",a,b); swap(&a,&b); printf("after swap\ta=%d,b=%d\n",a,b); } void swap(int *x,int *y) { int t; t=*x; *x=*y; *y=t; printf("in swap x=%d,y=%d\n",*x,*y); }不明白为什么地址传递时双向的 值传递是单向传递

void swap(int *x,int *y) { int *t; t=x; x=y; y=t; printf("in swap x=%d,y=%d\n",*x,*y); }
把swap函数改成这样,为什么跟值传递一个样了 形参的值交换了但是实参的值没有变 这不也是传的地址么?