C++引用

本文介绍了C++中的引用概念,包括其作为变量别名的特性,不改变对象实体,以及引用初始化的规则。讨论了const引用、引用与指针的区别,并展示了引用在函数参数传递中的优势。同时,解释了为什么不能将int引用用于double变量,并提供了引用类型的错误示例。

引用概念

引用的符号和取地址一样,可以把它理解为取别名,引用变量不会开辟新的空间,它和它引用的对象共用一块内存

int main()
{
	int a = 10;
	int& b = a;
	int& c = b;
}

查看一下三个变量的地址

可以看到它们的地址都是同一个

引用的特性

  • 引用定义的时候必须初始化
  • 一个变量可以进行多个引用
  • 引用一旦有了实体,就不能改变
int main()
{
	int a = 10;
	int& b = a;
	int c = 20;
 	b = c;
}

因为引用对象不能被改变,因此上面代码中的b=c不是b的实体变成c,而是给b赋值,我们可以看看abc的值和地址

 我们定义一个变量,不允许它被改变时,我们会加上const关键字,这个时候要引用const变量,引用前面也需要加上const,引用后权限可以相等,可以缩小,不能放大

int main()
{
	int a = 10;
	const int& b = a; //权限缩小

	const int c = 10;
	const int& d = c; //权限相等

	const int e = 10;
	int& f = e;       //权限放大 不被允许
}

如果int引用double变量会发生什么事呢

int main()
{
	double a = 1.23;
	int& b = a;       //报错
	const int& c = a;
}

为什么不加const会报错呢,因为如果把double赋值给int,会发生类型转换,会有一个临时变量取到double的整型部分然后赋给int,这个临时变量不能被修改,因此int引用double实际上就是引用这个临时变量,要加上const

使用场景

之前我们如果写函数去交换两个变量的值,需要传入变量的地址,还要在函数内对地址进行解引用,现在把地址换成引用,直接对引用进行操作即可

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

引用和指针的区别

  • 引用定义时要初始化,指针不用
  • 引用指定实体后不能更改,指针可以指向任何变量
  • 引用不能为NULL,指针可以
  •  sizeof(引用)是类型的大小,sizeof(指针)是地址大小
  • 引用++为值加一,地址++为向后推
  • 可以有二级指针,不能二级引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值