C++函数的调用与参数传递
根据函数参数传递的不同方式分 :
1. 函数传值调用
2. 函数传址调用
3. 函数引用调用
1、传值调用
函数传值调用是将实参的值传递给形参,形参和实参各自具有单独的存储空间,因此改变形参的值时,实参的值不会受到任何影响。
值传调用多用在不需要被调用函数改变实参的值的场合。实参可以是常量、变量或表达式,被调用函数的形参必须用变量,不能是指针或引用。
示例代码:
...
void DataDouble(int x,int y);
int main()
{
int x,y;
x=10;
y=5;
DataDouble(x,y); //传值调用
cout<<"in main() "<<"x="<<x<<";"<<"y="<<y<<endl;
return 0;
}
void DataDouble(int x,int y)
{
x=x*2;
y=y*2;
cout<<"in DataDouble() "<<"x="<<x<<";"<<"y="<<y<<endl;
}
执行该程序,输出以下结果:
in DataDouble() x=20;y=10
in main() x=10;y=5
2、传址调用
传址调用则传递的是变量的存储地址。实参是地址值,用地址常量或指针变量表示,形参是指针变量。函数调用时系统将实参所表示的地址值赋给形参的指针变量,从而使得形参和实参的指针指向的是相同的存储地址。在被调用函数中,可以通过形参指针改变其所指向的元素。
传址调用的实现机制就是可以通过改变形参所指向的变量值来影响实参。
示例代码:
...
void DataDouble(int *x,int *y);
int main()
{
int x,y;
x=10;
y=5;
DataDouble(&x,&y); //实参传递的是地址值
cout<<"in main() "<<"x="<<x<<";"<<"y="<<y<<endl;
}
void DataDouble(int *x,int *y) //形参用指针
{
*x=(*x)*2; //对指针所指向的存储空间的值×2
*y=(*y)*2;
cout<<"in DataDouble() "<<"x="<<*x<<";"<<"y="<<*y<<endl;
}
执行该程序,输出以下结果:
in DataDouble() x=20;y=10
in main() x=20;y=10
3、引用调用
使用函数的引用调用时,函数的实参用变量名,形参是引用类型。函数调用时,实参给形参赋值,对引用进行了初始化,引用是实参的别名。在被调用函数中,可以通过引用间接访问被引用的变量,所有在引用上施加的操作,实质上就是施加在被引用变量上的操作。
引用调用可以通过形参引用改变被调用函数中被引用的实参变量的值。
示例代码:
...
void DataDouble(int &rx,int &ry);
int main()
{
int x,y;
x=10;
y=5;
DataDouble(x,y);
cout<<"in main() "<<"x="<<x<<";"<<"y="<<y<<endl;
return 0?;
}
void DataDouble(int &rx,int &ry) //形参是引用
{
rx=rx*2;
ry=ry*2;
cout<<"in DataDouble() "<<?"rx="<<rx<<";"<<"ry="<<ry<<endl;
}
执行该程序,输出以下结果:
in DataDouble() x=20;y=10
in main() x=20;y=10
http://wenku.baidu.com/view/4dbe44f77c1cfad6195fa75d.html