【跟学C++】C++引用(Study9)


 ============================ 【说明】 ===================================================
  大家好,本专栏主要是跟学C++内容,自己学习了这位博主【 AI菌】的【C++21天养成计划】,讲的十分清晰,适合小白,希望给这位博主多点关注、收藏、点赞。
  主要针对所学内容,通过自己的理解进行整理,希望大家积极交流、探讨,多给意见。后面也会给大家更新,其他一些知识。若有侵权,联系删除!共同维护网络知识权利!
 =======================================================================================

1、了解引用

  引用的概念,一开始我与大家一样一脸懵。但在C++中,引用的作用与指针可以相提并论,提高代码质量,引用也有很多优势。
  其实,引用可以联想到一个词——别名,或者是曾用名。大家都有姓名,例如张三,当然张三也可以有别名叫三三、小张。。。换句话说,引用就是变量的别名,变量由变量名和变量值组成,想给变量取一个别名时,就可以利用引用
  声明引用时,需要将其初始化为一个变量。 因此通过引用,我们他可以访问这个变量的数据。引用的声明方式如下

DataType 变量名=变量值;
DtaType &引用名=变量名;

  通过一个案例,来熟悉一下引用:

#include<iostream>
using namespace std;
int main(){
	int a = 10;
	cout << "a=" << a << endl;
	cout << "a的内存地址为:" << hex << &a << endl;
	
	int &b = a;
	cout << "b=" << dec <<b << endl;
	cout << "b的内存地址为:" << hex << &b << endl;

	int &c = b;
	cout << "c=" << dec << c << endl;
	cout << "c的内存地址为:" << hex << &c << endl;

	return 0;
}

在这里插入图片描述
  注意:代码中,dec表示按十进制方式输出,hex表示按十六进制方式输出。若不使用dec,结果为:
在这里插入图片描述
  上面案例中,了解了什么是引用,如何声明一个引用,对于上述案例我们可以知道:
  (1) 一个变量,可以声明多个引用;变量可以有多个别名,例如张三有很多别名一样。
  (2) 引用是不占用额外存储空间的,引用的地址和变量地址一样,引用所访问的值就是原变量的值。

2、利用引用向函数传递参数

  刚刚得知,引用时不占用额外空间的,引用可以让你访问的相应变量所在的内存地址,这一点很重要,也很实用
  之前在这【跟学C++】C++的函数(Study6)一篇博客中详细介绍了如何调用函数,在调用函数时,需要将实参传递给函数形参,然后被函数所使用的。实际上,实参传递像是复制的过程,在这个过程中,需要给形参分配一个新的空间存储实参传递的值,若实参值很大,那么形参占用内存空间也会很大。
  为了避免这种空间开销,引用就有很大的作用,按引用向函数传递参数可以这样声明:

return_DataTyoe function_name(DataType &parameter);

  实参按照引用的方式进行传递,实参不算是形参的拷贝形式,而是别名,例如:

void func(int &num) {
	num = num * num*num;
}

int main() {
	int num = 0;
	cout << "请输入数字:";
	cin >> num;
	func(num);
	cout << "num=" << num;
	
	return 0;
}

在这里插入图片描述
  之前在学函数时,知道形参在进入函数后会被创建,当退出函数时被销毁,在这个案例中,形参num并没有被销毁,而且能够正确输出对应值。
  原因就是,实参5传递给形参num时,时以引用的方式,函数在执行时,直接对num所在内存单元进行操作,因此函数结束,操作结果依然存在。

3、关键字const作用在引用上

  之前说过关键字const的作用,使用关键字const引用时,是无法通过引用修改它指向的变量值。例如:

int a=5;
const int &b=a;//利用const声明静态引用
1.错误做法:通过静态引用修改变量
b=40;//错误做法,无法修改静态引用

2.通过原变量可以修改
a=40const int &b=a;

3.可以再声明一个静态引用
const int &c=b;

  如果想确保被调函数不能修改调用函数中的变量,可以利用const声明引用。例如:

void func(const int &num,int &result) {

	result = num * num*num;

}
int main() {
	int num = 0,output=0;
	cout << "请输入数字:";
	cin >> num;
	func(num ,output);
	cout << num<<"^3= " << output;
	return 0;
}

在这里插入图片描述
  如果在被调函数func()中,出现这样情况:

void func(const int &num,int &result) {
	num=5;
	result = num * num*num;
}

  这种情况,编译器是无法通过的,由于num在函数声明时是const引用,不能直接对num进行修改,确保程序安全。

4、总结

  最后,长话短说,大家看完就好好动手实践一下,切记不能三分钟热度、三天打鱼,两天晒网。大家也可以自己尝试写写博客,来记录大家平时学习的进度,可以和网上众多学者一起交流、探讨,我也会及时更新,来督促自己学习进度。一开始提及的博主【AI菌】,个人已关注,并订阅了相关专栏(对我有帮助的),希望大家觉得不错的可以点赞、关注、收藏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cqy阳

预祝上岸,感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值