当前课程知识点:C++语言程序设计基础 > 第6章 数组、指针与字符串(一) > 导学 > 导学
大家好
欢迎回来继续学习
C++语言程序设计
现在我们开始学习第六章
首先
由我和李超老师
将第六章的主要内容
给大家做一个简单的介绍
李老师
其实学生们
学完了前面的内容以后
好多同学有这样的疑问
说你的例题都这么小
然后里头就那么几个变量
如果我有大批量数据
需要处理呢
那程序里面
我起变量名也起不过来呀
我有几十个
几百个
几千个数据
那怎么办呢
其实这个时候
用数组是一个很好的办法
对吧
对啊
数组是一种构造的数据类型
然后这种数据类型
里面可以存放相同
或者是相似类型的数据
或者是对象
并且以顺序的方式来访问
这一类数据用数组来存储
是方法方便和合适的
这一章里头
我们就会给大家介绍数组
还有同学其实也问过我
就是郑老师在开始的时候说
C++是完全兼容C的
而C语言是用来写操作系统的
它可以直接访问
通过地址的方式来访问内存
很多同学很好奇
问我
什么时候能学到
这样的相关内容呢
其实用地址去访问内存
应该说是一个很底层的功能
由于C++
它能够用地址来访问内存空间
所以
我们反而会觉得有点担心
万一说我随便编一个整数
当地址去访问内存空间
那不是把内存里面
有可能有用的东西给破坏了吗
其实不是这样的
虽然C++可以允许我们
通过内存地址去访问内存空间
但是
这也是有规矩的
我们必须只能用
合法获得的地址去访问
允许我们程序访问的内存空间
怎么控制这一点呢
在这一章就会给大家介绍
指针呢
实际上就是一个
用来存放地址的
这样的数据类型
我们可以用它来存放数据的地址
还可以用它来存放
程序代码的地址
也就是说
存放函数的地址
所以我们可以通过地址
去访问数据
还可以用地址去调用函数
但是呢
大家还是会有这样的疑问
李老师 是不是这样
有同学会说
好好的
我函数有函数名
变量有变量名
我干吗非得用地址啊
好象还不那么好用
对
是吧
那你给大家介绍介绍
同学有这个疑问是很正常的
确实
指针不仅仅理解起来
要稍微费劲一点
而且指针使用起来
也会带来一些不安全的因素
所以我们大多数情况下
只要能不用指针
尽量不要用指针
可是有的时候
我们不得不必须要使用指针
那就是
比如说我们就将会学到的
动态内存分配
动态分配的内存
获得的返回值
只能是指针类型
这个时候你就不得不
使用指针来进行数据访问了
对 没有变量名
对
没有名字了
没有机会用名字访问
所以我们只能用指针来访问
所以呢
指针还是一个非常有用的类型
是的
我们还要是让大家理解这一点
把指针掌握好
是的
还有呢
就是说
我们用数组的时候
还是有
其实有点麻烦
对 有很多不方便之处
为什么
它要是越界怎么办
对
越界的意思是说什么
如果数组里面
我允许放十个数据
你放了十一个
放了十八个
那怎么办
非法了 越界了
对 没法访问内存空间了
然后就会引起一些
一些错误
莫名其妙的错误出来
对
那这个时候呢
实际上类库里面
给我们已经准备好了一个
更好用的
面向对象的数组
就是这个vector
那么vector的功能
李老师简单给大家介绍一下
vector确实非常强大
有了vector以后
你会感到
它是一个更智能化
更安全的面向对象类
方向对象的方式的一组数据
那么你可以灵活地
改变它的长度
这个时候
你只要在越界之前
把它的长度进行伸缩
就再也不用担心越界了
除此以外
它还有其他的一些
和传统数组类似的便捷之处
它可以直接通过下标去访问
等等的好处
到相关的章节你就会了解了
是的
然后 还有就是说
我们可以通过指针
去获取动态内存分配的
内存空间
这种地址
内存空间地址
那么这个时候呢
问题又来了
如果我在类的数据成员里面
定义某些成员它是指针
在运行的时候呢
当需要内存空间的时候
我们去做动态内存分配
然后把这个返回的地址
赋到成员变量指针里面去
同学们想想
这个时候
如果你要做复制构造
会发生什么问题呢
你想想
一个已有的对象
里面成员有一个是指针
这个指针指向某一个
在运行时动态申请的存储空间
那么用这样一个已有对象
去初始化新对象的时候
大家想
既然是复制
那肯定我又得要
这么一块存储空间
对吧
这个时候 李老师
浅层复制好象就做不到这一点了
对吧
对
在前面章节的时候
大家一直觉得
系统默认构造函数
不是就挺好用的吗
实际上一一对应的复制就可以了
那么在这一章里你会看到
这个时候是不可以的
就是这一章将会给大家介绍的
深拷贝
对
有了深拷贝以后呢
我们就可以能够真正地
把动态内存分配的地址
它指向的那些内存空间的内容
也全都给搬家搬过来
我们也在新对象中
同样申请这么一块内存空间
这就是深拷贝
也叫深层复制的
一个重要的应用场景
所以学完这一章以后
我们对第四章遗留的这个问题呢
我相信同学们
也会有更好的理解的
对
还有啊 李老师
这个字符串一直是很多同学
一个疑问
是的
大家觉得字符串常量很明白
但是字符串变量呢
好象一直都没有接触过
对
一般我们说有整型常量
那就有整型变量来存放它
有浮点常量
就有浮点变量来存放它
我们有双引号
里面的字符串
作为字符串的常量
但是没有字符串的变量
把它放哪儿
对
所以这一章里头呢
会给大家讲两种方法
第一种方法
是从C语言继承过来的传统方式
用字符数组来存储
和处理字符串
当然这种方法呢
还有很多不方便之处
对吧 郑老师
对
因为数组本身
它有它的缺陷
它有可能越界
然后尤其是用数组
来存放字符串的时候
那么还要末尾有一个0
作为结束标记
你要忘了这个0
它就不成为字符串了
所以推荐大家使用
类库里为我们准备好的
这个string类
李老师
你给大家说说string类是个什么
string类
是C++里头的非常好的一个类
它可以把字符串
用面向对象的方式进行处理
那么您可以方便地
进行字符串的比较
拼接等等等等
比用数组来存放字符这种方式
要方便的多
也安全的多
这一章里头
我们也会给大家介绍
是
好 那这个呢
就是这一章
我们俩要给大家介绍的主要内容
我会给大家介绍
这些基础语法基本概念
以及与这些基本概念相关的
验证性的这些例题
然后在这章的最后
要请李超老师
给大家介绍一个综合的实例
是的
在前面的章节里面
给大家介绍了一些
简单的实验和例题
但是如果我们要处理
大规模的这种应用问题呢
还需要更多的一些经验
我们通过前几章的学习呢
知道了基本的控制结构
然后
类和对象的基本概念和用法
然后加上这章
新学的这些内容呢
我们可以去完成更复杂的功能
我希望能够通过综合实例
让大家接触一些
稍稍长一些
稍稍复杂一些的问题
如何去解决
是的
从这章开始呢
我们内容的难度就增加了
是的
大家知道呢
我们学习程序设计
不是说学点语法
能够编点小例题习题就行了
你总归要做一点
略有规模的程序
要做点实用的程序
这个时候呢
能够观察学习一点
稍微规模大一点的
这种综合实例
对大家提高编程水平
是非常有好处的
这些就是我们这一章
要给大家介绍的内容
这些内容呢
大家听了我们前面介绍
是不是觉得很有意思
我和李超老师
会带着大家一起
学习这一章的内容
会给大家进行详细的讲解
希望大家能够开心
愉快地学习这一章的内容
-导学
--第1章导学
-计算机系统简介
--计算机系统简介
--计算机系统简介 测试题
-计算机语言和程序设计方法的发展
--计算机语言和程序设计方法的发展 测试题
-面向对象的基本概念
--面向对象的基本概念 测试题
-程序的开发过程
--程序的开发过程
--程序的开发过程 测试题
-信息的表示和储存
--计算机的数字系统
--数据的编码表示
--信息的表示和储存 测试题
-实验指导
-导学
--第二章导学
-C++语言概述
--C++语言概述 测试题
-基本数据类型、常量、变量
--程序举例
--基本数据类型、常量、变量 测试题
-运算与表达式
--运算与表达式 测试题
-实验二:简单程序设计(上)
-数据的输入和输出
--数据的输入和输出
--数据的输入和输出 测试题
-选择结构
--if语句
--switch语句
--选择结构 测试题
-循环结构
--for语句
--循环结构 测试题
-自定义类型
--自定义类型
--自定义类型
-第2章小结
--第二章小结
-实验二:C++简单程序设计(下)
-导学
--导学
-函数定义
--函数定义
--函数定义 测试题
-函数调用
--例3-2
--例3-3
--例3-4
--例3-5
--例3-6
--函数调用 测试题
-嵌套与递归
--例3-9
--例3-10
--嵌套与递归 测试题
-函数的参数传递
--函数的参数传递
--函数的参数传递 测试题
-引用类型
--引用类型 测试题
-含有可变参数的函数
--含有可变参数的函数 测试题
-内联函数
--内联函数 测试题
-constexpr函数
--CONSTEXPR函数课后习题
-带默认参数值的函数
--带默认参数值的函数 测试题
-函数重载
--函数重载 测试题
-C++系统函数
--C++系统函数习题
-第3章小结
--第三章小结
-实验三(上)函数的应用
-实验三(下)函数的应用
-导学
--导学
-面向对象程序的基本特点
--面向对象程序的基本特点 测试题
-类和对象
--类和对象的定义
--类和对象 测试题
-构造函数
--构造函数基本概念
--委托构造函数
--复制构造函数
--构造函数 测试题
-析构函数
--析构函数
--析构函数 测试题
-类的组合
--类的组合
--类的组合程序举例
--前向引用声明
--类的组合 测试题
-UML简介
--UML简介
--UML简介课后习题
-结构体与联合体
--结构体与联合体 测试题
-枚举类
--枚举类
--枚举类 测试题
-第4章小结
--第四章小结
-实验四(上)
--实验四(上)
-实验四(下)
--实验四(下)
-导学
--导学
-标识符的作用域与可见性
--标识符的作用域与可见性 测试题
-对象的生存期
--对象的生存期
--对象的生存期 测试题
-类的静态成员
--类的静态成员 测试题
-类的友元
--类的友元 测试题
-共享数据的保护
--共享数据的保护 测试题
-多文件结构和预编译命令
--多文件结构和预编译命令 测试题
-第5章小结
--小结
-实验五
--实验五
-导学
--导学
-数组的定义与初始化
--数组的定义与使用
--一维数组应用举例
--数组的定义与初始化 测试题
-数组作为函数的参数
--数组作为函数的参数 测试题
-对象数组
--对象数组
--对象数组 测试题
-基于范围的for循环
-指针的定义和运算
--指针的定义和运算 测试题
-综合实例
--综合实例
-实验六(上)
--实验六上
-指针与数组
--指针数组
--指针与数组 测试题
-指针与函数
--指针类型的函数
--指向函数的指针
--指针与函数 测试题
-对象指针
--对象指针
--对象指针 测试题
-动态内存分配
--动态内存分配 测试题
-智能指针
--智能指针
-vector对象
--vector对象
--vector对象 测试题
-对象复制与移动
--移动构造
--对象复制与移动 测试题
-字符串
--C风格字符串
--string类
--字符串 测试题
-第6章小结
--第六章小结
-综合实例
--综合实例
-实验六(下)
--实验六(下)