引用的详解

本文详细探讨了C++中函数参数传递的三种方式:值传递、地址传递和引用传递。值传递无法修改实参,地址传递和引用传递则可以。其中,引用作为实参时,相当于给变量起了别名,无法再引用其他空间。对比指针,引用必须初始化且不能改变引用对象。在需要改变实参值的场景下,通过指针或引用作为函数参数可以实现这一目标。同时,文章还介绍了这两种方式在内存占用和灵活性上的区别。

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

int a =10;
&a;                  //取地址      
int *p = nullptr;   定义指针
*p;        间接引用

int &b = a; 数据类型名 &引用名称 = 被引用的对象; 相当于对引用的变量取别名,定义引用必须初始化
在这里插入图片描述

定义完引用后b一直都指向a的那块内存空间,不能改变指向的空间

int a =10;
&a;           
int &b = a; 
int c = 30;
b = c;                 //赋值操作,把c的值赋给b指向的空间

解决下面的问题:想要通过函数改变实参的值

void show (int a)
{
	a = 50;
	cout<<a<<endl;
}
int a = 10;
cout<<a<<endl;       10
show(a);                   50
cout<<a<<endl;       10

该函数是值传递不能改变实参,所以此时可以采取两种方案:
一、用指针变成地址传参

void show (int *p)
{
	*p = 50;
	cout<<*p<<endl;
}
int a = 10;
cout<<a<<endl;       //10
show(&a);                   //50
cout<<a<<endl;       //50

二、使用引用

void show (int &a)
{
	a = 50;
	cout<<a<<endl;
}
int a = 10;
cout<<a<<endl;       10
show(a);                   50
cout<<a<<endl;       50

函数传递参数的方式:
1.值传递 实际上是在形参的位置创建了一个新的变量,不能修改函数外面的实参,只能使用。重新创建的形参会占用额外的内存空间(不可控)
2.地址传递 可以修改函数外的实参。会额外占用指针的空间(可控);
3.引用传递 可以修改函数外的实参,不会占用额外的空间

指针和引用的区别:
1.引用一旦定义就要初始化,引用一块真实存在的空间。指针可以不初始化,也可以指向一个空。
2.引用一旦定义完成,不能再引用其他的空间,指针的指向可以随时改变。
3.引用是给一块已经存在的内存空间起别名,不会额外申请空间,指针自己会有一块用来存储地址的空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值