ITEEDU

第四章 数组

教学目标

●介绍数组数据结构

●介绍用数组存放、排序与查找数值清单与表格

●介绍如何声明数组、初始化数组和引用数组的各个元素

●将数组传递到函数中

●介绍基本排序方法

●声明和操作多下标数组

4.1 简介

本章是介绍数据结构的重要课题。数组(array)数据结构由相同类型的相关数据项组成。第6章介绍结构(structure)和类(class),两者都可以带有不同类型的相关数据项。数组和结构是静态项目.在整个程序执行期间保持相同长度(当然,也可以用自动存储类,在每次进入和离开定义的块时生成和删除)。第15章介绍链表、队列、堆栈、树之类的动态数据结构如何在程序执行期间改变长度。本章介绍的数组是C语言中的指针数组(第5章将介绍指针)。第8章“运算符重载”和本书末尾的 "标准模板库(STL)"一章将介绍用面向对象编程技术将数组实现为完全成熟的对象,这些基于对象的数组比第4章介绍的类C语言的指针数组更安全、更灵活。

4.2 数组

数组是具有相同名称和相同类型的一组连续内存地址。要引用数组中的特定位置或元素,就要指定数组中的特定位置或元素的位置号(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。注意带下标的数组名是个左值,可用于赋值语句的左边。

图4.1中整个数组的名称为c,该数组的12个元素为c[0]、c[1]、c[2]...c[11]。的值为-45、c[1]的值为6、c[2]的值为0,c[7]的值为62、c[11]的值为78。要打印数组c中前三个元素的和,用下列语句:

  cout<< c[0]+c[1]+c[2]   <<endl;

要将数组c的第7个元素的值除以2,并将结果赋给变量x,用下列语句:

x = c[6] / 2;  
常见编程错误 4.1

一定要注意“数组的第7个元素”与“数组元素7”之间的差别。由于数组下标从0开始,因此“数组第7个元素”的下标为6,而“数组元素7”的下标为7,是第8个元素。这常常是“差1错误”的原因。

包括数组下标的方括号实际上是个C++运算符。方括号的优先级与括号相同。图4.2显示了本书前面介绍的C++运算符优先级和结合律。运算符优先级从上到下逐渐减少。

   运算符                                结合律                类型 
    ()  []                                从左向右              括号
    ++  --  +  -  !  static_cast()  从右向左              一元
    *  /  %                               从左向右              乘
    +  -                                  从左向右              加
    <<  >>                                从左向右              插入/读取
    <  <=  >  >=                          从左向右              关系
    ==  !=                                从左向右              相等
    &&                                    从左向右              逻辑与
    ||                                    从左向右              逻辑或
    ?:                                    从右向左              条件
    =  +=  -=  *=  /=  %=                 从左向右              赋值
    ,                                     从左向右              逗号 

图 4.2 运算符的优先级和结合律

4.3 声明数组

数组要占用内存空间。程序员指定每个元素的类型和每个数组所要的元素,使编译器可以保留相应的内存空间。要告诉编译器对整型数组c保留12个元素,可以声明如下:

int c[12];

可以在一个声明中为几个数组保留内存。下列声明对整型数组b保留100个元素,对整型数组x保留27个元素:

int b[100],x[27];

数组可以声明包含其他数据类型。例如,char类型的数组可以存放字符串。字符串及其与字符数组的相似性(C++从c语言继承的关系)和指针与数组的关系将在第5章介绍。在介绍面向对象编程后,我们将讨论成熟的字符串对象。