C++函数的调用与参数传递


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值