参数传递有两种方式 1.值传递 2.地址传递
- 1.参数为指针变量
- 2.参数为引用类型
- 3.参数为数组名
值传递
把实参的值传送给局部工作区相应的副本中,函数使用这个副本执行必要的功能。函数修改的是副本的值,实参的值不变。
void main()
{float a,b;
cin>>a>>b;
swap(a,b);
cout<<A<<endl<<b<<endl;
}
void swap(float m,float n)
{float temp;
temp=m;
m=n;
n=temp;
}
当被调用函数执行完毕,那么m,n从内存中就释放了,返回到函数调用的地方,a,b并没有改变。
地址传递
指针变量作参数
1.形参变化影响实参
void main()
{float a,b,*p1,*p2;
cin>>a>>b;
p1=&a;p2=&b;
swap(p1,p2);
cout<<a<<endl<<b<<endl;
}
voidswap(float *m,float *n)
{
float t;
t=*m;
*m=*n;
*n=t;
}
形参变化不影响实参
void main()
{float a,b,*p1,*p2;
cin>>a>>b;
p1=&a;p2=&b;
swap(p1,p2);
cout<<a<<endl<<b<<endl;
}
voidswap(float *m,float *n)
{
float *t;
t=m;
m=n;
n=t;
}
数组名做参数
传递的是数组的首地址 对形参数组所做的任何改变都将反映到实参数组中
void main (void){
char a[10]="hello";
sub(a);
cout<<a<<endl;
}
void sub(char b[])
{b[]="world";
}
输出是:world
引用类型做参数
void main(){
float a,b;
cin>>a>>b;
swap(a,b);
cout<<a<<endl<<b<<endl;
}
void swap(float &m,float &n)
{
float temp;
temp=m;
m=n;
n=temp;
}
- 引用类型可以简单地理解为共用同一个地址
- 引用类型作形参,在内存中并没有产生实参的副本,它直接对实参操作;而一般变量作参数,形参和实参占用不同的存储单元。因此,当参数传递的数据量大时,用引用传递的时间和空间效率比较好。
- 指针参数容易产生错误阅读性差
|