定义函数时,形式参数加引用的意义

不加引用,按值传递

C++不加引用时,将按值传递参数,这意味着将数值参数传递给函数,而后者将其赋给一个新的变量。例如代码:

double side =5double volume = cube(side);

其中,side 是一个变量,在前面的程序运行中,其值为5,函数 cube()的函数头如下:

double cube(double x)

被调用时,该函数将创建一个新的名为 x 的 double 变量,并将其初始化为 5.这样 cube() 执行的操作将不会影响源程序中的数据,因为 cube() 使用的是 side 的副本,而不是原来的数据。用于接收传递值的变量被称为形参,传递给函数的值被称为实参

按引用传递

考虑一个常见的计算机问题:交换两个变量的值,交换函数必须能够修改程序中的变量的值,使用上述的按值传递函数还能可以吗?
答案显然是 不可以
因为函数将交换原始变量副本的内容,而不是变量本身的内容,对比如下两种写法:

void swap1(int a,int b){
	int tmp;
	tmp=a;
	a=b;
	b=tmp;
}
void swap2(int& a,int& b){
	int tmp;
	tmp=a;
	a=b;
	b=tmp;
}

调用这两个函数试试:

int main(){
	int x=1,y=2;
	swap1(x,y);
	cout<<x<<" "<<y<<endl;
	swap2(x,y);
	cout<<x<<" "<<y;
}

结果如下:

1 2
2 1

显然,按引用传递允许被调用的函数能够访问调用函数中的变量

附加:当使用string为函数参数时

仅使用参数的值

当我们仅使用参数的值时,正常的写法就可以奏效:

bool f(string s){
	if(s=="wow") return true;
	else return false;
}

int main(){
	string s="wow"if(f(s)==true) return 1;
	return 0;
}

我们知道,定义函数时函数头写成 bool f(string s) ,C++会创建一个副本变量来存储 s,因为这里只需要使用 s 的值进行判断,这样的写法也可以完成任务

需要对函数参数进行修改

显然,bool f(string s) 的函数头无法完成要求,正确的写法如下:

void f(string& s){
	if(s=="wow") s="TOT";
}

int main(){
	string s="wow"f(s);
	if(s=="TOT") return 1;
	return 0;
}

显然,使用 void f(string& s) 可以使函数中对参数进行修改,而不是对参数的副本进行修改

有用的话给个赞吧❤❤

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值