C++【引用】

P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。
P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。

  

在这里插入图片描述

                                           博主主页:LiUEEEEE
                                                C++专栏
                                              C语言专栏
                                            数据结构专栏
                                            排序算法专栏
                                         力扣牛客经典题目专栏

1、引用的概念


  引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。
  例如:李逵,在家称为"铁牛",江湖上人称"黑旋风"。

在这里插入图片描述

2、引用的使用方式


  引用的使用方式为:
  • 类型& 引用变量名(对象名) = 引用实体;

    例如:
int main()
{
	int a = 10;
	int& p = a;
	cout << "a = " << a << endl;
	p += 10;
	cout << "a = " << a << endl;

	return 0;
}

在这里插入图片描述
  C++中的引用类似于C语言的指针,但又区别于指针,指针是通过保存变量的地址,间接对其进行操作,而C++中的引用,就可以看作是其本体,可直接对其进行操作。

3、引用的注意事项


  在C++中使用引用时,需注意权限的变化,权限只可以平移或变小,不可以变大,下文将对其进行解释。

3.1、权限的放大(错误示范)

int main()
{
	const int a = 10;
	int& p = a;
	cout << "a = " << a << endl;
	p += 10;
	cout << "a = " << a << endl;

	return 0;
}

在这里插入图片描述
  在引用过程中,若对已经使用 const 保护起来的变量a进行引用,如上图所示,会出现报错,因为变量a的值不可以被改变,而引用者p却是可以改变的,发生了权限的放大,不可取。

3.2、权限的平移

int main()
{
	const int a = 10;
	const int& p = a;
	cout << "a = " << a << endl;
	cout << "p = " << p << endl;

	return 0;
}

在这里插入图片描述
  当对前一段代码做如上的更改,即可成功运行,上图中代码的引用也就是权限的平移。

3.3、权限的缩小

int main()
{
	int a = 10;
	const int& p = a;
	cout << "a = " << a << endl;
	a += 10;
	cout << "a = " << a << endl;
	//p += 10;

	return 0;
}

在这里插入图片描述

在这里插入图片描述
  当引用时加入了const来修饰,所代表的意思是,不可以通过引用者p对实体a进行操作,但可以通过实体a来改变a的值,如上所示。

3.4、临时变量具有常性(不可被修改)


  
int main()
{
	double x = 12.34;
	
	int i = x;

	int& r1 = x;
	const int& r1 = x;

	return 0;
}

在这里插入图片描述

  如上图所示,我们将浮点型变量 x 的值赋值给整形 i 时,会发生隐式类型转换,但转换时不是直接将 x 的值转换为整型赋值给 i ,而是通过临时变量,将 x 的整数部分提取出来,给予临时变量,再通过临时变量将值赋予i,而同样的,在引用x的值时我们引用者所引用的不再是浮点型 x ,而是类型转换后的临时变量,而临时变量又有常性,不可被修改,所以不可以直接如图上所示直接引用,需要加上const来让他的权限平移,否则就会如图所示报错。




4、引用与指针的区别


  在C++中引用与指针可以同时使用,但是他们却有一些区别,在语法上,引用时引用者不开辟空间,而指针的使用需要开辟空间,且指针不论指向什么类型,其大小固定。
  但在底层汇编逻辑上,指针与引用并无区别,都开辟了一个空间来存放地址,只不过在C++编译器中明面上不显示引用所开辟的空间。




5、结语


在这里插入图片描述

  十分感谢您观看我的原创文章。
  本文主要用于个人学习和知识分享,学习路漫漫,如有错误,感谢指正。
  如需引用,注明地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值