函数参数传递是按值传递还是按地址传递?该如何处理

函数参数传递是按值传递还是按地址传递?
这个跟函数参数的类型有关系吗?比如程序两个数交换.

#include   <stdio.h>
swap();
main()
{
int   a;
int   b;
        scanf( "%d%d ",&a,&b);
        printf( "交换前a=%d,b=%d\n ",a,b);
        swap(a,b);
        printf( "交换后a=%d,b=%d\n ",a,b);


}

int   swap(int   x,int   y)
{
int   z=0;
x=z;
x=y;
z=y;

}

这里没有交换,是不是跟传递参数的类型有关.请高手解答这个问题.



------解决方案--------------------
int swap(int x,int y)
{
int z=0;
x=z;
x=y;
z=y;

}
===========
这是值传递
------解决方案--------------------
C语言中没有真正的地址传递,需要的话,你可以通过传递指针来达到那个效果,就像scanf那样。
------解决方案--------------------
c语言是传值的
c++还可以传引用