- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章 数组与指针 主要内容 数组类型 指针类型 指针与数组的联系 对象指针 函数指针 1、数组类型 假设要求编写程序:输入1000名学生的分数,并求总和。 1、数组类型(续) 一维数组的声明 例: float score[1000]; 常见错误 int length; cin length; float score[length]; //错误,长度不能是变量。 1、数组类型(续) 一维数组元素的引用 下标指示元素在数组中的位置,取值从0开始 例: score[100], score[i], score[4*i+7] 每个元素是一个变量 C++编译器不进行数组下标越界检查!! 1、数组类型(续) 一维数组的存储形式 数组元素按下标顺序连续存放 例:score数组在内存中的存储情况 数组一旦分配内存,则不再改变存储位置 数组名代表数组的首地址,为地址常量 1、数组类型(续) 一维数组的初始化 例: int years[5] = { 1970, 1990, 1921, 1871, 1774 }; float score[4] = { 67.5, 90.0, 100.0, 45 }; int years[] = { 1970, 1990, 1921, 1871, 1774 }; float score[] = { 67.5, 90.0, 100.0, 45 }; 1、数组类型(续) 数组不能进行整体操作 数组操作通常逐个元素进行 特例: 以’\0’结束一维char型数组可以进行整体输入/输出,实际进行的是字符串的输入/输出 1、数组类型(续) 数组作函数参数 形参实际上是一个指针变量(但以数组形式出现) 调用函数时,可以用数组名作实参 将实参的值(一个地址常量)传递给形参 使得实参数组和形参数组对应着同一块内存 数组作函数参数,参数传递效果是引用传递 例:数组作函数参数 要求编写程序,输入某个班级20人的成绩,求其最高分。其中输入成绩、求最高分要求设计为2个函数。 例:数组作函数参数 例:数组作函数参数(续) 例:数组作函数参数(续) 1、数组类型(续) 枚举类型用作数组下标类型 例: 1、数组类型(续) 利用typedef定义数组 简单方便地定义多个长度和元素类型均相同的数组 例: typedef float FloatArr[100]; FloatArr angle; FloatArr velocity; 1、数组类型(续) 结构数组与对象数组 每个元素为结构变量或对象 通过.操作符使用元素的各个成员 对象所属的类必须具有默认构造函数(所有元素均使用默认构造函数进行初始化) 1、数组类型(续) 二维数组的声明 例:存储若干个地区在一年内每个月的平均温度的数据结构 float avgTemp[9][12]; //假设共有9个地区 1、数组类型(续) 答案:提高元素访问速度 编译器确定元素位置的方法 假设数组起始地址为Start,每行共有COL个元素,每个元素占内存空间为SIZE个字节 第k行的起始地址为 Start+k*COL*SIZE 下标为[k][n]的元素的地址为 Start+k*COL*SIZE+ n*SIZE 若下标从1开始,则公式中的k和n均需减1 二维数组的简单例子 1、数组类型(续) 二维数组的初始化 1、数组类型(续) 利用typedef定义二维数组 效果均等价于: float avgTemp[9][12] 1、数组类型(续) 二维数组作函数的参数 例:通过函数input为二维数组avgTemp各元素输入值,并通过函数getHighest分别获得各地最高的月平均温度 代码 代码(续) 代码(续) 注意 形参array不仅需要给出列长度,而且该长度必须与实参avgTemp的列长度相同。否则会发生“错位”的现象。假设上例中input的函数头改为: void input ( float array[ ][10], //列长度由12变成10 int row ) 2、指针类型(续) 两例比较: j、k、i所在的内存空间的起始地址是一样的,都是1000、2000和3000。 但后例中三个变量是int型,分别占据4字节。因此与前例中的内存存储情况不同 指针(pointer):变量的地址 这种数据应包含两方面的信息: 地址值 所指向的数据(对应内存块中存放的数据)的类型 变量的深入理解 变量的四个要素 名字:命名变量
文档评论(0)