初识C++(引用相关知识)

引用的概念与定义

在C++中,引用可认为是对象的另外一个别名,并不如同指针那样开辟新空间,就如同“豹子头”和“林冲”,“黑旋风”和“李逵”,其实际上指的是同一个人,引用与被引用对象也是共用一块空间,其基本形式如下:
类型& 别名=引用对象;
例:

int main()
{
	int a = 1;
	int& b = a;//对a取一个别名b
	b = 10;//对别名进行修改实际就是修改对象a的值
	cout << b << endl;

	return 0;
}

输出结果如下:
在这里插入图片描述

引用的相关特性

引用在实际使用时有几个特性需要注意:

  1. 引用在定义时必须初始化
int& c;//这个引用在定义时没有初始化,编译无法通过
  1. 引用一旦确定引用的实体就不能更改,就如同“豹子头”就是指林冲而不能指李逵,引用在确定好以后就不能更改
int a = 10;
int b = 20;
int& c = a;
//c = b//这条代码是错误的,c已经确定是a的引用就不能再更改
  1. 一个对象可以有多个引用,就如同一个人可以有多个别名,而对别名的修改也是对本体的修改

引用的使用

在实践中,引用经常被用于函数的传参以及作为返回值返回,这样可以做到减少拷贝提高效率的同时改变被引用对象的值
简单举例:

void swap(int& x, int& y)//这里就是利用引用传参达到修改实参的效果
{
	int tmp = x;
	x = y;
	y = tmp;
}

int main()
{
	int a = 10;
	int b = 20;
	swap(a, b);
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
}

输出结果如下:
在这里插入图片描述
从这里可以看出引用与指针传参功能类似,二者是相辅相成的

const引用

引用也可以被const修饰,形式如下;

const int a = 2;
const int& b = a;

const int& c = 2 * a;

这里需要注意:

  1. 如果需要引用一个被const修饰的对象,引用本身也需要被const修饰,否则就会出现权限放大
const int a = 0;
int& b = a;//典型的权限放大,此时如果对b进行修改操作 b = 10;就会崩溃
  1. 类似与上例中 2 * a 这样的表达式,结果会存放在一个临时对象中,而C++规定,临时对象具有常性,所以也必须使用const修饰引用

指针与引用的区别

指针与引用实际上相辅相成,在底层上也很相似,但各有各的特点,不可完全相互替代

  1. 语法概念上,引用只是给对象取别名,不会开辟新空间,而指针会开辟新空间
  2. 引用在定义时必须初始化,而指针是建议初始化并非必须
  3. 引用在初始化确定引用对象后就不能被修改,而指针可以修改所指对象
  4. sizeof中的大小也不同,引用即所引用对象类型大小,而指针则取决于平台规定(32位平台4个字节,64位平台8个字节)
  5. 指针容易出现空指针或野指针,引用很少出现,相对安全
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值