教学目标
●介绍数组数据结构
●介绍用数组存放、排序与查找数值清单与表格
●介绍如何声明数组、初始化数组和引用数组的各个元素
●将数组传递到函数中
●介绍基本排序方法
●声明和操作多下标数组
本章是介绍数据结构的重要课题。数组(array)数据结构由相同类型的相关数据项组成。第6章介绍结构(structure)和类(class),两者都可以带有不同类型的相关数据项。数组和结构是静态项目.在整个程序执行期间保持相同长度(当然,也可以用自动存储类,在每次进入和离开定义的块时生成和删除)。第15章介绍链表、队列、堆栈、树之类的动态数据结构如何在程序执行期间改变长度。本章介绍的数组是C语言中的指针数组(第5章将介绍指针)。第8章“运算符重载”和本书末尾的 "标准模板库(STL)"一章将介绍用面向对象编程技术将数组实现为完全成熟的对象,这些基于对象的数组比第4章介绍的类C语言的指针数组更安全、更灵活。
数组是具有相同名称和相同类型的一组连续内存地址。要引用数组中的特定位置或元素,就要指定数组中的特定位置或元素的位置号(position number)。
图4.1显示了整型数组c。这个数组包含12个元素。可以用数组名加上方括号(1))中该元素的位置号引用该元素。数组中的第一个元素称为第0个元素(zeroth elemem)。这样,c数组中的第一个元素为c[0],c数组中的第二个元素为c[1],c数组中的第七个元素为c[6],一般来说,c数组中的第i个元素为c[i-1]。数组名的规则与其他变量名相同。
方括号中的位置号通常称为下标(subscript),下标应为整数或整型表达式。如果程序用整型表达式下标,则要求值这个整型表达式以确定下标,例如,假设a等于5,b等于6,则下列语句:
c[a + b] += 2将数组元素c[11]加2。注意带下标的数组名是个左值,可用于赋值语句的左边。
cout<< c[0]+c[1]+c[2] <<endl;
要将数组c的第7个元素的值除以2,并将结果赋给变量x,用下列语句:
x = c[6] / 2;
一定要注意“数组的第7个元素”与“数组元素7”之间的差别。由于数组下标从0开始,因此“数组第7个元素”的下标为6,而“数组元素7”的下标为7,是第8个元素。这常常是“差1错误”的原因。
包括数组下标的方括号实际上是个C++运算符。方括号的优先级与括号相同。图4.2显示了本书前面介绍的C++运算符优先级和结合律。运算符优先级从上到下逐渐减少。
运算符 结合律 类型 () [] 从左向右 括号 ++ -- + - ! static_cast() 从右向左 一元 * / % 从左向右 乘 + - 从左向右 加 << >> 从左向右 插入/读取 < <= > >= 从左向右 关系 == != 从左向右 相等 && 从左向右 逻辑与 || 从左向右 逻辑或 ?: 从右向左 条件 = += -= *= /= %= 从左向右 赋值 , 从左向右 逗号
图 4.2 运算符的优先级和结合律
数组要占用内存空间。程序员指定每个元素的类型和每个数组所要的元素,使编译器可以保留相应的内存空间。要告诉编译器对整型数组c保留12个元素,可以声明如下:
int c[12];
可以在一个声明中为几个数组保留内存。下列声明对整型数组b保留100个元素,对整型数组x保留27个元素:
int b[100],x[27];
数组可以声明包含其他数据类型。例如,char类型的数组可以存放字符串。字符串及其与字符数组的相似性(C++从c语言继承的关系)和指针与数组的关系将在第5章介绍。在介绍面向对象编程后,我们将讨论成熟的字符串对象。