第一模块:
课程名称:百度大牛带你结合实践重学C++
章节:6-1 ~ 6-2,6-20 ~ 6-21
讲师姓名:quickzhao
第二模块:
课程内容:
6-1 ~ 6-2,6-20 ~ 6-21小节介绍了指针的概念、左值、右值以及引用等相关的知识
第三模块:
学习心得:
6-1 指针的概念
640K的内存大小足以满足任何人的需要(显然是过时了)
计算机体系中的存储层次:
内存单元和内存地址间的关系:
内存由内存单元组成,内存单元用于存放各种类型的数据
计算机对每一个内存单元都给定了一个编号,这些编号就是我们所说的内存地址
内存地址是通过16进制进行编码的,不利于人的记忆,也不是给人来记的,是给机器来记忆的,人通过【名字(变量名)】来访问内存位置
eg:
指针:
指针本质上就是一个变量,符合变量定义的基本形式,指针的值就是【xxx对象的地址】
eg:
int a = 112
float c = 3.14
int* d = &a
间接访问(引用指针):通过指针进行访问,操作符为 *
eg:
cout << *d << endl // 输出的值为 112
cout << d << endl // 输出的值为a变量所在的地址
小结:
1.一个变量有三个重要信息:
变量所在内存单元的编号
变量所存的值
变量的类型
2.指针变量(可能存在多级指针):
用来存储变量地址的变量,通过指针变量可以间接的访问到另一个变量的值
6-2 左值和右值(了解就行)
左值:就是内存单元的编号(即:地址本身),能放左边也能放到右边【关键:能取到地址】
右值:就是数据本身,只能放到等号的右边【关键:不能取到地址】
补充:
左值,右值个人认为是一个比较【过时的说法】,在其他语言中基本上没有这种说法了,
以后听到或看到【左值,右值】直接翻译成【地址,数据本身就行】
具体分析:
左值:最常见的是函数、数据成员的名字(函数名、变量名)
右值:不可取地址的表达式
eg:a = b+c
&a 成立 则 a是左值
&(b+c) 不成立 则 (b+c)是一个右值
6-20 引用
引用:是一种特殊的指针,特殊在于【不能修改】
使用指针存在的隐患:
空指针
野指针
不知不觉改变了指针的值,却浑然不知,还继续使用
引用的好处:
不存在空引用
必须初始化
一个引用永远指向她初始化的那个对象
引用的基本使用:可以把引用简单的理解成【一个变量的别名】,使用时认为是变量本身就行
eg:
eg:
两个思考问题:
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等等。
第四模块:
课程截图: