函数参数传递方式
C++中函数有3种参数传递方式:
•按值传递(pass by value)
•指针传递(pass by pointer)
•引用传递(pass by reference)
一.按值传递
值传递:把实参表达式的值传递给对应的形参变量。
使用值传递方式,调用函数本身不对实参进行操作,传递过程是单向的,无法在函数中修改被传递的实参值。
示例1:
void Exchg(int x,int y)
{
int tmp;
tmp=x;
x=y;
y=tmp;
cout<<"x="<<x<<endl;
cout<<"y="<<y<<endl;
}
void main()
{
int a=4;
int b=6;
Exchg(a,b);
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
return;
}
输出:
二.指针传递
指针传递(地址传递):把实参的存储地址传递给对应的形参指针,从而使得形参指针和实参指针指向同一个地址。
因此,被调用函数中对形参指针所指向地址中内容的任何改变都会影响到实参值。
指针传递方式虽然可以使得形参的改变对相应的实参有效,但如果在函数中反复利用指针间接访问会使程序产生错误并难以阅读。
示例2:
void Exchg(int *px,int *py)
{
int tmp;
tmp=*px;
*px=*py;
*py=tmp;
cout<<"*px="<<*px<<endl;
cout<<"*py="<<*py<<endl;
}
void main()
{
int a=4;
int b=6;
Exchg(&a,&b);
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
return;
}
输出:
三.引用传递
引用既不是参数值的拷贝(复制),也不是指向该参数的指针,引用只是参数的别名,可以实现与指针相同的效果,但无需重新分配地址空间。
示例3:
void Exchg(int &x,int &y)
{
int tmp;
tmp=x;
x=y;
y=tmp;
cout<<"x="<<x<<endl;
cout<<"y="<<y<<endl;
}
void main()
{
int a=4;
int b=6;
Exchg(a,b);
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
return;
}
输出: