C语言参数传递——值传递与地址传递
值传递
int main(){
int a=3;
int b=4;
printf("初始值a=%d,b=%d\n",a,b);
exchange(a,b);
printf("运行后a=%d,b=%d",a,b);
return 0;
}
void exchange(int a ,int b){
int temp;
temp=a;
a=b;
b=temp;
}
声明格式int function(int a, int b)
引用格式function(x, y)
值传递在函数内部的参数与外部没有关系,函数开始时外部参数赋值给内部函数,函数结束之后内部参数自动释放,外部参数不改变
地址传递
int main()
{
int i,j,k;
int data[100];
int length=3;
int a=3;
int b=4;
printf("初始值a=%d,b=%d\n",a,b);
exchange(&a,&b);
printf("运行后a=%d,b=%d",a,b);
}
void exchange(int *a ,int *b){
int temp;
temp =*a;
*a=*b;
*b=temp;
}
声明格式void function(int *a)
引用格式function(&a)
地址传递的格式如上,函数参数传递的是地址,所以在函数内部的参数与外部参数操作同一块内存。
引用传递
void swap(int &x,int &y);
void main()
{
//void swap(int &x,int &y);
int a=3,b=5;
swap(a,b);
printf("a=%d b=%d\n",a,b);
}
void swap(int &x,int &y)
{
int temp;
temp=x;
x=y;
y=temp;
}
声明格式void function(int &x,int &y)
引用格式function(a,b);
引用传递和地址传递实际的效果差不多,都可以修改到实参
数组的传递
-
数组名作为函数传递的参数
声明格式function(int a[])
引用格式function(a);
使用效果与地址传递一样,可以修改数组 -
数组元素作为函数传递的参数
声明格式function(int a)//值传递或者是void function(int *a)//地址传递
引用格式function(a[2]);或者function(&a[2]);
此时存在值传递与地址传递的差别
更新:
使用地址传递时,如f(&a)
时,a不能为指针否则就是多重指针