C++学习笔记3 - 引用&

本文详细介绍了C++中的引用,包括其定义、与指针的区别以及引用的本质。引用作为变量的别名,必须在定义时初始化且不可改变,因此避免了野指针的问题,提高了安全性。引用主要用于函数参数传递,可以实现值传递的效果。文中还探讨了引用的const特性,以及引用与const指针的关系,指出引用在内存中可能表现为const指针。最后,通过示例展示了如何使用引用实现变量交换功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、引用介绍

1、定义: int a ; int &b = a;
2、引用定义和识别的关键:&符号。注意这里和取地址没有任何关系。
3、引用符号在定义时必须同时初始化,以后不能再另外赋值,只能使用。

二、引用和指针的对比

1、指针在C和C++中都有,且使用方法和实现本质完全相同,引用只有C++可用。
2、引用可以理解为功能弱化、安全性增强的低配版指针。
3、引用能做的事情,指针都能做。但指针能做的事情,引用不一定能做。
4、引用是它指向变量的“别名”,这个是从引用的使用效果角度讲的,对熟悉指针的人反而不好理解“别名”这个词。
5、引用比指针弱的地方就是一个引用定义时绑定了一个变量,后面没法改了。
6、引用比指针强的地方也是没法改,所以不存在“野指针”的问题,更安全。
7、引用主要用在函数传参和返回值。

三、引用的本质剖析

1、引用可以加 const 修饰

  • const int &b = a; 表示b是a的const别名,无法通过b修改a了
  • 主要用在函数形参中,告诉大家该函数内部不会修改实参的值。用在某些时候我们有一个非const类型的变量,但是我们在某个函数调用的过程中,不希望变量的值在函数内部被修改,这时候就可以用const引用来传参。

2、引用的本质是 const 指针

  • sizeof 引用,得到的不是引用本身的大小,而是引用指向的目标变量的大小。(sizeof 指针 得到的是指针本身的大小)。
  • 在 struct 或class 中定义一个引用,再 sizeof 整个struct或class就会不一样

3、引用的本质是 const 指针

  • int &b = a; 类似于 int * const b = &a ;
  • C++ 标准并没有规定引用是否占用内存空间,但是大多数编译器都把引用实现为 const 指针,所以大部分编译器中引用也是要占内存空间的
  • 引用是天然 const 的,所以定义时必须初始化指向变量,否则就没意义了
  • 引用本质是指针,是地址,所以才能实现传址调用的效果

4、总结:引用就是指针在定义时把指针变量本身 const 化

demo:实现swap函数

需求:实现2个变量的数值交换


// 不成功,形参交换成功,实参交换失败
void swap1(int a, int b)
{
	int tmp;
	
	tmp = a;
	a = b;
	b = tmp;
}

// 成功,用指针,实参交换成功
void swap2(int *pa, int *pb)
{
	int tmp;
	
	tmp = *pa;
	*pa = *pb;
	*pb = tmp;
}

// 成功,用引用,实参交换成功
void swap3(int &pa, int &pb)		// &在这里是引用标识符
{
	int tmp;
	
	tmp = pa;
	pa = pb;
	pb = tmp;
}

int main()
{
	int x = 1, y = 2;
	int &ra = x;
	int &rb = y;
	
	swap1(x,y);        								//x=1,y=2
	swap2(&x, &y); //这里的&是取地址     				//x=2,y=1
	swap3(ra , rb);    								//x=2,y=1
	
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值