C++引用

C++引用,第1张

引用概念

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

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(指针)是地址大小
  • 引用++为值加一,地址++为向后推
  • 可以有二级指针,不能二级引用

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/921216.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存