C++ 引用类型

1. 引用传递

在C++中值传递可以实现单向传递,但是引用传递可以实现双向传递。

引用类型

  • 引用(&)是标识符的别名
  • 例如:int  i, j ;  int & ri  =  i;   //定义int引用ri,并初始化为变量i的引用。
  • 定义一个引用时,必须同时对他进行初始化,使它指向一个已存在的对象。

      j = 10 

      ri = j;  //相当于是i=j

  • 一旦一个引用被初始化后,就不能改为指向其他对象
  • 用途:引用可以作为形参

2. 一个例子

输入两个整数交换后输出(值传递)

#include <iostream>
using namespace std;

void swap(int a, int b){
	int t = a;
	a = b;
	a = t;
}

int main()
{
	int x = 5, y = 10;
	cout << "x = " << x << " y = " << y << endl;
	swap(x, y);
	cout << "x = " << x << " y = " << y << endl;

	system("pause");
	return 0;
}

该程序试图交换两个变量的值,但是发现这两个值并没有交换,程序执行过程见下图,用实参去初始化形参,在子函数中交换了两个值,但是由于参数只能是单向的,也就是说只能将实参传给形参,而不能将形参传给实参,所以并没有达到交换两个变量值的效果。

输入两个整数交换后输出(引用传递)

#include <iostream>
using namespace std;

void swap(int &a, int &b){
	int t = a;
	a = b;
	a = t;
}

int main()
{
	int x = 5, y = 10;
	cout << "x = " << x << " y = " << y << endl;
	swap(x, y);
	cout << "x = " << x << " y = " << y << endl;

	system("pause");
	return 0;
}

程序仅仅修改了子函数中的参数列表,加入了&,此时这两个参数表示的是两个引用变量,a就可以看成是变量的别名,定义的时候并没有为变量分配存储空间,只有在函数被调用时才为变量分配存储空间,程序执行过程见下图:

主函数中在调用子函数时,虽然x,y在子函数中看不到,但是他们的别名a,b在子函数中确是能够看得见的,所以在子函数中实质上就是用a,b来操纵x,y,这就是引用做函数参数,实现的双向传递的效果。

发布了59 篇原创文章 · 获赞 25 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/m0_37570854/article/details/104949337