C++程序设计 第5章 数组与指针
第五章 数组与指针本章将深入学习数组包括多维数组的知识和 应用,以及它们与指针的关系。 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字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [行业范文]美好的法语句子
- [行业范文]描写露珠的句子
- [行业范文]精彩禅语句子图片
- [行业范文]关于满嘴谎言的句子
- [行业范文]关于安静的句子48句
- [行业范文]关于小河的句子
- [行业范文]描写稻田的句子
- [行业范文]思念好朋友的句子
- [行业范文]赞美雪的句子
- [行业范文]早上激励人心的句子
- [行业范文]失恋忧伤的句子
- [行业范文]努力积极向上的句子
- [行业范文]对工作心灰意冷的句子
- [行业范文]失恋让人心疼的句子
- [行业范文]描写珍惜青春的句子
- [行业范文]表达思念的句子简短
- [行业范文]关于父爱的句子范例
- [行业范文]浪漫的英语句子
- [行业范文]关于周末的句子
- [行业范文]思念牵挂的句子
- 有关感恩班会课件简短(二篇)(感恩班会
- 2025年初二下乡军训心得体会800字(15篇
- 关于新员工培训方案汇编(关于新员工培
- 精选高考生寒假学习计划书(精)(高考生
- 毕业实训报告心得体会(3篇)(实训报告心
- 银行工作感悟及心得范文怎么写(四篇)(
- 精选领导干部个人政治画像报告通用(七
- 精选超市11.11活动促销方案(精品超市品
- 2025年怎么做自我介绍汇总(5篇)(至2025
- 最新企业错峰生产方案(26篇)(山西企业
- 最新暑期三下乡社会实践调研报告范本(
- 最新幼儿园大班教育教学总结怎么写(最
- 最新教师节主持词小学(优秀9篇)(教师节
- 关于小学安全教育教学方案(推荐)(关于
- 员工信模板范文怎么写(五篇)(员工信息
- 最新保险销售离职申请书(十六篇)(最新
- 最新XX小学防校园欺凌工作方案怎么写(2
- 有关特岗教师辞职信范文(推荐)(特岗教
- 精选党的建设工作要点简短(党的建设的
- 如何写安康杯竞赛活动总结汇总(4篇)(安




