教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 范文大全 > 行业范文 >

C++程序设计 第5章 数组与指针

来源:网络收集 时间:2026-09-04
导读: 第五章 数组与指针本章将深入学习数组包括多维数组的知识和 应用,以及它们与指针的关系。 C++语言拥有在运行时获得变量地址和操纵地 址的能力,这种可用来操纵地址的变量类型就是 指针。指针可以用于数组,用于内存访问,还可 作为函数的参数。 第五章 数组

第五章 数组与指针本章将深入学习数组包括多维数组的知识和 应用,以及它们与指针的关系。 C++语言拥有在运行时获得变量地址和操纵地 址的能力,这种可用来操纵地址的变量类型就是 指针。指针可以用于数组,用于内存访问,还可 作为函数的参数。

第五章 数组与指针

5.1 数组

5.5 数组与指针

5.2 多维数组 5.3 指针与地址

5.6 字符串 5.7 多级指针与多维数组(选读)

5.4 this指针

5.1 数组C++的数据类型:基本数据类型亦称内置数据类型。C++为它们 提供了内置的支持(协助函数helper function), 以完成各种允许的运算。也就是说基本数据类型也 是一个类:有数据有操作,两者是封装起来的。在C++的标准库中支持基本类抽象的组合,如 字符串类,复数类等标准库类类型。

在内置数据类型和标准库类类型之间是复合类 型(Compound type),特别是指针和数组类型。

5.1 数组

5.1.1 数组、数组元素及其存储方式 5.1.2 数组名作为函数参数

5.1.3 数组的应用——回溯算法(选读)

5.1.1 数组与数组元素及其存储方式数组的引入:数组(array)是一种顺序容器(sequence container),是由单一类型元素组成的一个 有序集合: int fibon[10]={0,1,1,2,3,5,8,13,21,34}; 数组名为fibon,这是一个包含10个元素的 整型一维(dimension)数组,其第一个 元素为fibon[0],存放0,最后一个元素为 fibon[9],存放34。 fibon[0] fibon[1] 0 1 2 3

fibon[2] fibon[3]fibon[8]

数组元素的访问方式:通过下标操作符(subscript),按元素 在数组中的位置进行访问,称为索引访 问(indexing)或下标访问 (subscripting)。参见图5.1 。

fibon[9]

21 34

图5.1 数组在内存中的存储

5.1.1 数组与数组元素及其存储方式注意:1: 数组是一种组合类型,是不能作为一个整体进行 访问和处理的,只能按元素进行个别的访问和处理。 2: C++数组第一个元素的下标为0,而不是1,且 下标表达方式是固定的。 3:数组元素在内存中是从低地址开始顺序排列, 各元素的存储单元占用内存大小相同,各元素的存储单 元之间没有空隙,可以从数组第一个元素存储单元的起 始地址计算出任意一个元素存储单元的起始地址。【例 5.1】找出整型数组各元素中的最大数和最小 数。数组中的数由随机数函数 rand()产生。

5.1.1 数组与数组元素及其存储方式结构数组定义:struct keyword { char word[16]; //关键字 int count; //该关键字将在源程序中出现的次数 };

初始化:结构数组初始化时可以用括号来区分每一个结构,例如: keyword keytab[]={{"auto", 0},{"break", 0},{"case", 0}, ……}; 当提供了数组中所有结构值时,不必用这种括号的形式。 keyword keytab[]={"auto

", 0,"break", 0,"case", 0,"char", 0, ……"unsigned", 0,"volatile", 0,"while", 0,};

5.1.1 数组与数组元素及其存储方式对象数组定义: CGoods goods[3]; 该商品类对象数组包含3个商品对象数组元素,系统调用 3次默认的构造函数来建立这3个商品对象数组元素。

初始化:应该完整书写各个元素的构造函数及成员数据初值: CGoods goods[3]={ CGoods("夏利2000",30,98000.0), //调用三参数构造函数,初始化goods[0] CGoods("桑塔纳2000",164000.0), //调用两参数构造函数,初始化goods[1] CGoods() //调用默认的构造函数,初始化goods[2] };

5.1.2 数组名作为函数参数数组作为参数:数组可以作为函数的参数。在函数调用时传递 实参数组的首地址,所以在被调函数中对形参数组 的处理实际就是对调用函数的实参数组的处理。C++只传递数组首地址,而对数组边界不加 检查。这带来的好处是,函数对长度不等的同 类数组都通用。如要指定长度可以设定另一个 参数来传递数组元素的个数。 【例5.2】字符数组与字符数组相连接

5.1.3 数组的应用——回溯算法(选读)回溯法:回溯法的基本思想是,通过对问题的分析找出解决问题的 线索,先在一个局部上找出满足问题条件的局部的解,然后逐 步由局部解向整个问题的解的方向试探,若试探成功就得到问 题的解,试探失败逐步向后退,改变局部解再向前试探。回溯 法能避免枚举法的许多不必要的搜索,使问题比较快地得到解 决。回溯法应用广泛,八皇后问题、迷宫问题、四色地图等等 都可以用回溯法求解。 【例5.3】八皇后问题:在8×8的国际象棋棋盘上安放八个皇 后,为避免她们之间相互攻击,要求没有任何两个皇后在棋盘 的同一行、同一列及在同一对角线上。图6.4是八皇后问题的一 个 解 。 八 皇 后 在 棋 盘 上 可 能 有 的 布 局 数 是 :C864 = 64! / (8!×56!)=4426165368种,用回溯法解决八皇后问题显然 是合适的。

5.2 多维数组C++中数组可以嵌套,就是多维数组。5.2.1 多维数组

5.2.2 多维数组作为函数参数

5.2.1 多维数组存储与访问方式二维数组:一维数组可对应数学中的向量,而二维数组可对应矩阵, 可用一个二维数组存储矩阵。12 3

34 5

56 7

78 11

910 13

1112 17

二维数组的横向称为行,纵向称为列,上面这个数组为三行 六列。定义二维数组的通用格式为: 《存储类型》 类型 数组名[常量行表达式] [常量列表达式]; 行与列用常量表达式表示。

5.2.1 多维数组存储与访问方式二维数组分析:上面的数组可定义为: int mat[3][6];

第 一 行 第 一 列 的 元 素 为 mat[0][0] , 第 三 行 第 六 列 元 素 为 mat[2][5], 下标仍是从0开始。

计算机内存是一维编址的,多维数组必须要转化为一维方式存 储,越右的下标变化越快,二维数组则按行排列,先排第一行, 再排第二行,直到所有行排完:mat[0][0] mat[0][1] mat[0][2] mat[0][3] mat[0][4] mat[0][5] mat[1][0] mat[1][1] mat[1][2] mat[1][3] mat[1][4] mat[1][5] mat[2][0] mat[2][1] mat[2][2] mat[2][3] mat[2][4] mat[2][5]

即所谓按行排列。 有了确定的关系后可以算出多维数组任一元素在内存的位置, 设有a数组m行n列,每个元素占b个字节,a[i][j] 的首地址为: 数组的首地址+(i*n+j)*b;

5.2.1 多维数组存储与访问方式多维数组分析:C/C++ 中的多维数组基本的定义是以数组作为元素构成的 数组,二维数组的数组元素是一维数组,三维数组的数组元素 是一个二维数组,依此类推。也就是说,多维数组用的是一个 嵌套的定义。图5.3表示一个三维数组可定义为: int a3d[6][3][4]; a3d是由6个二维数组构成的数组,其 中第一个二维数组用a3d [0] 表示, 即图6.5立方体最上面的3*4大小的一 片,也就是一个3*4的二维数组。 而a3d[0][2]则是a3d[0] 的第3个元 素,一个一维数组,立方体最上最右 的一条,(阴影所示)即一个4元素的 一维数组。

图5.3

6*3*4的三维数组

5.2.1 多维数组存储与访问方式多维数组的数组名:代表数组中第一维(最高维)第一个元素(0号元素) 在内存中的首地址,如三维数组的数组名代表的是组成三维 数组的第一个二维数组的存储首地址。 当数组作为函数的参数进行传递时,多维数组同样是作 为第一维第一个数组的首地址传递给函数,所以物理上是传 地址。在函数中对形参的数组元素的修改实际上是对作为实 参的原数组的元素进行修改。

5.2.1 多维数组存 …… 此处隐藏:2626字,全部文档内容请下载后查看。喜欢就下载吧 ……

C++程序设计 第5章 数组与指针.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/fanwen/2142302.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)