变量与地址
int main(){
int a, b;
int *x, *y;
a = 3;
b = 55;
x = &a;
y = &b;
printf("x=&a=%x;y=&b=%x;\na=*x=%d;b=*y=%d;", &a, &b, *x, *y);
}
输出结果
*x 为变量(地址传递声明参数)x为地址
&a 为地址(地址传递调用参数),a 为变量(变量传递声明与调用参数)
函数的传递
需要注意的是,C语言中使用地址传参,声明的格式是void function(int *a)
而调用的格式是:function(&a)
1)数组元素作为函数参数,函数的声明没有什么差别,还是分为上述的两种方式:
void function(int a);//值传递
void function(int *a);//地址传递
,
调用函数时分别采用
function(a[2]);
function(&a[2]);
这种情况下,存在值传递与地址传递的不同,参考上述。
2)数组名作为参数传递:
例如function(int a[])
调用函数:function(a);//这里a是一个数组名字
用数组名做函数实参时,不是把数组元素的值传给形参,而是把实参数组的首元素的地址传递给形式参数,也就是说形参数组发生改变,会使实参数组发生同样的变化。换言之,函数进行的操作就是直接发生在传递进来的数组上的。
另外还有一种引用传递,是c++语言中参数的传递方式,C中没有该调用方式,声明格式如下
void exchange(int &a,int &b)