C++中的引用传递
时间:2020-02-23 14:30:01 来源:igfitidea点击:
介绍
在本教程中,我们将讨论C++中按引用传递的概念。
将参数传递给C++中的函数
我们可以通过两种方法中的任何一种来传递对象或者变量,即按值传递和按引用传递。
两者都在不同的机制上工作,各有优缺点。
让我们分别更深入地研究上述两种技术。
在C++中按值传递
在按值传递方法中,被调用函数创建了一组全新的变量并复制了参数的值。
因此,它无权访问原始变量,并且只能处理较早创建的副本。
按值传递的内存状态
上面的框图描述了以下示例的方法的工作。
#include <iostream>
using namespace std;
void my_swapper(int x, int y)
{
int temp;
temp=x;
x=y;
y=temp;
//swapping takes place among x & y
//and not in a & b!
cout<<"Swapped values are: ";
cout<<"a="<<x<<" b="<<y<<endl;
}
int main()
{
int a= 10, b= 20;
cout<<"Original Values: ";
cout<<"a="<<a<<" b="<<b<<endl; //original values
my_swapper(a,b); //pass by value
cout<<"After swap: ";
cout<<"a="<<a<<" b="<<b<<endl;
//pass by value causes no change in original values
return 0;
}
输出:
Original Values: a=10 b=20 Swapped values are: a=20 b=10 After swap: a=10 b=20
其中" x"和" y"是分别存储变量" a"和" b"的值的副本。
如我们所见,函数" my_swapper()"仅在副本之间交换值,而不能更改原始变量。
当不希望修改原始值时,按值传递很有用,并确保函数不会损害原始值。
在C++中通过引用传递
C++中通过引用传递的方法使用不同的机制。
无需将值传递给调用的函数,而是创建或者传递对原始变量的引用。
引用是预定义变量的别名。
即,可以使用任何变量或者引用名称来访问相同的变量。
现在让我们看一个例子来理解它。
通过引用的内存状态
类似地,以上框图描述了以下示例的方法的工作。
#include <iostream>
using namespace std;
void my_swapper(int &x, int &y) //references to variables created
{
int temp;
temp=x;
x=y;
y=temp;
//swapping takes place and is reflected in original values
cout<<"Swapped values are: ";
cout<<"a="<<x<<" b="<<y<<endl;
}
int main()
{
int a=10, b=20;
cout<<"Original Values: ";
cout<<"a="<<a<<" b="<<b<<endl; //original values
my_swapper(a,b); //pass by reference
cout<<"After swap: ";
cout<<"a="<<a<<" b="<<b<<endl;
//pass by reference causes change in original values
return 0;
}
输出:
Original Values: a=10 b=20 Swapped values are: a=20 b=10 After swap: a=20 b=10
其中将a和b传递给my_swapper()函数。
因此," x"和" y"成为参考变量,分别是a和b的别名。
这样,交换x和y实际上会影响变量a和b。
从上面的输出中可以看出,这次a和b实际上是使用它们的引用进行交换的。
这也使我们想到了前面介绍的C++中的指针概念。
示例–使用C++中的"按引用传递"以英尺或者英寸为单位转换距离
此外,让我们看一个示例,以了解C++中按引用传递方法的用法。
#include <iostream>
using namespace std;
void convert(float &, char &,char &);//function prototype
int main()
{
//variable initialisation
float distance;
char choice, type='F';
cout<<"Enter Distance in feet: ";
cin>>distance;
cout<<"\nYou want distance in feet or inches? (F/I): ";
cin>>choice;
switch(choice)
{
case 'F': convert(distance,type,choice);
break;
case 'I': convert(distance,type,choice);
break;
default: cout<<"\n\nError!!!"; //if wrong choice is entered
exit(0);
}
cout<<"\nDistance = "<<distance<<" "<<type;
return 0;
}
//pass by reference
void convert(float &d, char &t, char &ch)
{
switch(ch)
{
case 'F': if(t=='I')
{
d=d/12;
t='F';
}
break;
case 'I': if(t=='F')
{
d=d*12;
t='I';
}
break;
}
}
在上面的代码中,我们将以英尺为单位的距离转换为英尺或者英寸。
与之前的示例类似,这次在函数convert()中,d,t和ch分别引用了变量distance,type和choice。
因此,任何参考中的更改也会更新原始值。

