【C++的引用】

C++的引用和指针

C++的引用

C++使用了一种符合类型,叫引用变量。(符号&)跟C 和 C++的取地址符一样,作用有点类似,但不是取地址符号。引用是给一个变量或者对象取一个别名,但是编译器并不会给引用开辟空间。可以说引用和它引用的对象是同一块空间,在编译器的角度来说。

#include<iostream>
using namespace std;
int main()
{
	int val = 8;
	int& reference = val;
	cout << "val = " << val << endl;
	cout << "reference = " << reference << endl;
	return 0;
}

在这里插入图片描述
在这里插入图片描述
可以发现val变量和它的引用变量reference的地址是一致的,reference被声名为int& 的类型,意思是指向int 变量的int& 的引用。
引用的作用有点类似指针,但引用并不是指针,虽然它看起来有点像。

#include<iostream>
using namespace std;
int main()
{
	int val = 8;
	int& reference = val;
	cout << "val = " << val << endl;
	cout << "reference = " << reference << endl;
	int* p = &val;
	cout << " *p = " << *p << endl;
	(*p)++;
	cout << "val = " << val << endl;
	cout << "reference = " << reference << endl;
	cout << " *p = " << *p << endl;
	reference++;
	cout << "val = " << val << endl;
	cout << "reference = " << reference << endl;
	cout << " *p = " << *p << endl;
	return 0;
}

在这里插入图片描述
在这里插入图片描述
这里val变量和reference引用的地址跟指针p一样,所以说变量val++ 或者引用reference++ 还是(*p)++都会影响其他两个的结果。**但是引用声名的时候必须初始化。**且引用的类型要和被引用的类型一样。一个变量可以被多次引用,但是一个引用只能引用一个一个实体。
在这里插入图片描述
可以在引用前面加上const 来修饰,不让引用指向其他的实体。

int val = 8;
int& const reference = val;

但是这并不是引用的真正作用。这样的引用并没有什么作用,引用的真正作用是做函数的参数。
上面说了,引用的类型要和被引用的对象类型一致,但是如果要引用成不同的类型,引用可以用const来修饰。
要使用const修饰的两种情况:
1.实参和形参的类型一样,但是实参是一个常数,形参就要用const来修饰。
2.实参是一个变量名,但实参和形参类型不一样,传参的时候会参数一个临时的拷贝,临时的拷贝具有常性,这个时候形参就要加上const。

int a = 0;
const double& b = a;

因为在不同类型的引用,中间会产生一个临时变量,临时变量具有常性,如果用const修饰就可以引用了。

引用作为函数的参数

在C++中,引用可以在函数被用作参数做形参,当函数被调用的时候,实参的变量会在调用的时候会是这个实参的别名,叫做引用传递,用这种方法可以访问到调用这个函数的实参。除了这种传参方式,其他的函数有传参的行为都是形参拷贝实参的数据,这种引用传参有点类似于传地址,拷贝地址然后通过地址来访问空间。

#include<iostream>
using namespace std;
double ADD1(double x)
{
	x += x;
	return x;
}
double ADD2(double& rx)
{
	rx += rx;
	return rx;
}
int main()
{
	double a = 8;
	cout << ADD1(a) << " ";
	cout << "ADD1 " << a << endl;
	cout << ADD2(a) << " ";
	cout << "ADD2 " << a << endl;
	return 0;
}

在这里插入图片描述
可以发现ADD1传参是a的拷贝,使用a 出了函数ADD1的作用域,a的值还没有变。ADD2传参是a的引用,别名是rx,rx就是a这个变量,使用出了ADD2的作用域,因为rx的变化,使用a也会发生变化。
如果程序员只是想把值传过去不发生改变,而且还想使用引用传值,可以在函数形参加上const修饰,可以避免实参发生变化。

double ADD2(const double& rx);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值