定义函数时,形式参数加引用的意义
不加引用,按值传递
C++不加引用时,将按值传递参数,这意味着将数值参数传递给函数,而后者将其赋给一个新的变量。例如代码:
double side =5;
double 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) 可以使函数中对参数进行修改,而不是对参数的副本进行修改
有用的话给个赞吧❤❤