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
。
因此,任何参考中的更改也会更新原始值。