为了账号安全,请及时绑定邮箱和手机立即绑定

【金秋打卡】第9天 2022重学C++ 6

标签:
C++

第一模块:

课程名称:百度大牛带你结合实践重学C++

章节:6-1 ~ 6-2,6-20 ~ 6-21

讲师姓名:quickzhao


第二模块:

课程内容:

6-1 ~ 6-2,6-20 ~ 6-21小节介绍了指针的概念、左值、右值以及引用等相关的知识


第三模块:

学习心得:

6-1 指针的概念

640K的内存大小足以满足任何人的需要(显然是过时了)

https://img1.sycdn.imooc.com/6367ce0100011b7207650131.jpg


计算机体系中的存储层次:

https://img1.sycdn.imooc.com/6367ce070001711108570445.jpg

内存单元和内存地址间的关系:

  • 内存由内存单元组成,内存单元用于存放各种类型的数据

  • 计算机对每一个内存单元都给定了一个编号,这些编号就是我们所说的内存地址

  • 内存地址是通过16进制进行编码的,不利于人的记忆,也不是给人来记的,是给机器来记忆的,人通过【名字(变量名)】来访问内存位置

eg:

https://img2.sycdn.imooc.com/6367ce17000167c708720335.jpg


指针:

指针本质上就是一个变量,符合变量定义的基本形式,指针的值就是【xxx对象的地址】

eg:

int a = 112 

float c = 3.14

int* d = &a


间接访问(引用指针):通过指针进行访问,操作符为 *

eg:

cout << *d << endl  // 输出的值为 112

cout << d << endl // 输出的值为a变量所在的地址                

https://img3.sycdn.imooc.com/6367ce1f00010acf04880265.jpg

https://img1.sycdn.imooc.com/6367ce270001791408640441.jpg


小结:

1.一个变量有三个重要信息:

  • 变量所在内存单元的编号

  • 变量所存的值

  • 变量的类型

2.指针变量(可能存在多级指针):

用来存储变量地址的变量,通过指针变量可以间接的访问到另一个变量的值


6-2 左值和右值(了解就行)

左值:就是内存单元的编号(即:地址本身),能放左边也能放到右边【关键:能取到地址】

右值:就是数据本身,只能放到等号的右边【关键:不能取到地址】


补充:

左值,右值个人认为是一个比较【过时的说法】,在其他语言中基本上没有这种说法了,

以后听到或看到【左值,右值】直接翻译成【地址,数据本身就行】


具体分析:

左值:最常见的是函数、数据成员的名字(函数名、变量名

右值:不可取地址的表达式

eg:a = b+c

&a 成立 则 a是左值

&(b+c) 不成立 则 (b+c)是一个右值


6-20 引用

引用:是一种特殊的指针,特殊在于【不能修改】


使用指针存在的隐患:

  • 空指针

  • 野指针

  • 不知不觉改变了指针的值,却浑然不知,还继续使用


引用的好处:

  • 不存在空引用

  • 必须初始化

  • 一个引用永远指向她初始化的那个对象


引用的基本使用:可以把引用简单的理解成【一个变量的别名】,使用时认为是变量本身就行

eg:

https://img1.sycdn.imooc.com/6367ce300001563404620292.jpg


eg:

https://img2.sycdn.imooc.com/6367ce3c00011e8206970436.jpg


两个思考问题:

1.有了指针为啥还需要引用

C++之父的解释:为了支持函数运算符的重载


2.有了引用为啥还需要指针

C++之父的解释:为了兼容C语言


一脉相承的3种语言:

C                                            C++                                        Java(C++--)

高级语言中的低级语言            高级语言中的中级语言              高级语言中的高级语言

只有指针                                 指针和引用都有                        只有引用  


一脉相承的2种语言:

JavaScript                                ES(JavaScript++)              TS(ES++


面向过程 --> 面向对象 --> 泛型编程 --> 函数式编程


函数参数值传递的原则:

  • 基本数据类型直接传值本身

  • 引用数据类型传对象的引用


C++语言本身在设计之初带有【唯物主义色彩】,即:把世界想的太复杂了,各种情况都考虑了进去,从而导致C++这也支持,那也支持,在语法的范式层面太过【自由】,自由到不知如何取舍,对软件工业的开发其实是不利的


6-21 C++编程中是否应该尽量避免使用指针?

C/C++语言中威力最大的同时也是最危险的就是指针,Java中干脆就直接用引用来取代指针,那么在C++编程实践中是否应该并免使用指针?

答:

首先,完全避免使用指针是不可能的,但直接操作指针确实也太过危险,所以,一个比较好的处理方式是——将指针包装起来,或者避免直接使用它。目前业界很多大型工程中有很多思想,都尽可能避免使用裸指针。比如STL中的智能指针,微软的COM等等。


第四模块:

课程截图:

https://img3.sycdn.imooc.com/6367cdda0001e72f07490217.jpg

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消