C++程序设计 湖南大学 杜四春、银红霞 第5章数组 5.1一维数组 5.2二维数组 5.3多维数组 5.4数组与函数 5.5数组的应用
C++程序设计 湖南大学 杜四春、银红霞 第5章 数组 5.1 一维数组 5.2 二维数组 5.3 多维数组 5.4 数组与函数 5.5 数组的应用
C++程序设计 湖南大学 杜四春、银红霞 数组类型是一种构造型(组合型)的数据 类型。 数组是由一组具有相同数据类型的元素组 成的集合。数组的类型就是这组元素的数据类 型。构成数组的这组元素在内存中占用一组连 续的存储单元。可以用一个统一的数组名标识 这一组数据,而用下标来指明数组中各元素的 序 根据数组的维数,分为一维数组、二维数 组和多维数组,常用的是一维和二维数组
C++程序设计 湖南大学 杜四春、银红霞 数组类型是一种构造型(组合型)的数据 类型。 数组是由一组具有相同数据类型的元素组 成的集合。数组的类型就是这组元素的数据类 型。构成数组的这组元素在内存中占用一组连 续的存储单元。可以用一个统一的数组名标识 这一组数据,而用下标来指明数组中各元素的 序号。 根据数组的维数,分为一维数组、二维数 组和多维数组,常用的是一维和二维数组
C++程序设计 湖南大学 杜四春、银红霞 5.1维数组 5.1.1一维数组的定义 定义一维数组的语法格式为: 类型数组名[常量表达式] 其中,类型是数组类型,即数组中各元素的数据 类型,可以是整型、浮点型、字符型等基本类型。数 组名是一个标识符,代表着数组元素在内存中的起始 地址,它的命名规则与变量名的命名一样。常量表达 式又称下标表达式,表示一维数组中元素的个数,即 数组长度(也称为数组大小),用一对方括号“[]括 起来。方括号“[]的个数代表数组的维数,一个方括 号表示一维数组
C++程序设计 湖南大学 杜四春、银红霞 5.1 一维数组 5.1.1 一维数组的定义 定义一维数组的语法格式为: 类型 数组名[常量表达式]; 其中,类型是数组类型,即数组中各元素的数据 类型,可以是整型、浮点型、字符型等基本类型。数 组名是一个标识符,代表着数组元素在内存中的起始 地址,它的命名规则与变量名的命名一样。常量表达 式又称下标表达式,表示一维数组中元素的个数,即 数组长度(也称为数组大小),用一对方括号“[ ]”括 起来。方括号“[ ]”的个数代表数组的维数,一个方括 号表示一维数组
C++程序设计 湖南大学 杜四春、银红霞 例如:下面分别定义了一个具有5个元素的字符型 数组a和一个具有10个元素的整型数组b: char asli int b[10li 对上面定义的数组b,也可以采用下面这种定义方 法: const int size=10 int blsizeli 注意:在定义数组时,不能用变量来描述数组定 义中的元素个数。例如,下面的定义方式是不合法的: int b[n]i
C++程序设计 湖南大学 杜四春、银红霞 例如:下面分别定义了一个具有5个元素的字符型 数组a和一个具有10个元素的整型数组b: char a[5]; int b[10]; 对上面定义的数组b,也可以采用下面这种定义方 法: const int size=10; int b[size]; 注意:在定义数组时,不能用变量来描述数组定 义中的元素个数。例如,下面的定义方式是不合法的: int b[n];
C++程序设计 湖南大学 杜四春、银红霞 下标指明了数组中每个元素的序号,下标值为整 数,用数组名加下标值就可以访问数组中对应的某个 元素。下标值从0开始,因此对于一个具有n个元素的 维数组来说,它的下标值是0~n-1。例如,对上例 中定义的数组b来说,b[O]是数组中的第一个元素 b[1]是数组中的第二个元素,,b[9]是数组中的最后 个元素,而不包含b[10]。 数组元素在内存中是顺序存储的。对于一维数组, 就是简单地按下标顺序存储。 例如,对上面定义的整型数组b,在内存中的存放 顺序如图5-1所示: b[0 b[3 图5-1一维数组的存储
C++程序设计 湖南大学 杜四春、银红霞 下标指明了数组中每个元素的序号,下标值为整 数,用数组名加下标值就可以访问数组中对应的某个 元素。下标值从0开始,因此对于一个具有n个元素的 一维数组来说,它的下标值是0~ n-1。例如,对上例 中定义的数组b来说,b[0]是数组中的第一个元素, b[1]是数组中的第二个元素,…,b[9]是数组中的最后 一个元素,而不包含b[10]。 数组元素在内存中是顺序存储的。对于一维数组, 就是简单地按下标顺序存储。 例如,对上面定义的整型数组b,在内存中的存放 顺序如图5-1所示: 图5-1 一维数组的存储 b[0] b[1] b[2] b[3] b[4]
C++程序设计 湖南大学 杜四春、银红霞 512一维数组的初始化 在定义数组时对其中的全部或部分指定初始值,这 称为数组的初始化。只有存储类别为静态的或外部的数 组才可以进行初始化。初始化的语法格式为: 类型数组名[数组范围]={值1,值2,…,值n} 例如:对在5.51小节中定义的数组a进行初始化 char a[5]={′a′,b′,′c′rd′r′e}; 或 char a[]={a′rb′,′c′,"d,e′};
C++程序设计 湖南大学 杜四春、银红霞 5.1.2 一维数组的初始化 在定义数组时对其中的全部或部分指定初始值,这 称为数组的初始化。只有存储类别为静态的或外部的数 组才可以进行初始化。初始化的语法格式为: 类型 数组名[ 数组范围 ]={值1,值2,…,值n} 例如:对在5.5.1小节中定义的数组a进行初始化。 char a[5]={’a’,’b’,’c’,’d’,’e’}; 或: char a[ ]={’a’,’b’,’c’,’d’,’e’};
C++程序设计 湖南大学 杜四春、银红霞 在对数组初始化时,也可以只对数组中的部分元 素指定初始值。也即,初始化值的个数可以少于或等 于数组定义的元素的个数,但不可以多于数组元素的 个数,否则会引起编译错误。 当初始化值的个数少于数组元素个数时,前面的 元素按顺序初始化相应的值,后面不足的部分由系统 自动初始化为零(对数值数组)或空字符“(0(对字 符数组)
C++程序设计 湖南大学 杜四春、银红霞 在对数组初始化时,也可以只对数组中的部分元 素指定初始值。也即,初始化值的个数可以少于或等 于数组定义的元素的个数,但不可以多于数组元素的 个数,否则会引起编译错误。 当初始化值的个数少于数组元素个数时,前面的 元素按顺序初始化相应的值,后面不足的部分由系统 自动初始化为零(对数值数组)或空字符‘\0’(对字 符数组)
C++程序设计 湖南大学 杜四春、银红霞 例如: intC[5]={1,2}; 定义整型数组C有5个元素,但只初始化前两个元 素:c[0]=1,c[1]=2。对于后面的三个元素没有定义 初始值,此时由系统自动给它们赋0。 数组长度与初始化元素的个数不相等时,数组 长度不能省去不写,如上例不能写为: intc[]={1,2}; 否则编译器会认为数组C只有2个元素而不是5个元 素
C++程序设计 湖南大学 杜四春、银红霞 例如: int c[5]={1,2}; 定义整型数组c有5个元素,但只初始化前两个元 素:c[0]=1,c[1]=2。对于后面的三个元素没有定义 初始值,此时由系统自动给它们赋0。 当数组长度与初始化元素的个数不相等时,数组 长度不能省去不写,如上例不能写为: int c[ ]={1,2}; 否则编译器会认为数组c只有2个元素而不是5个元 素
C++程序设计 湖南大学 杜四春、银红霞 对于字符型数组的初始化,除了上面介绍的将数 组中的元素一个一个赋值为字符的方式外,还可以有 另外一种方式,即将整个字符型数组一次性赋值为 个字符串,此时花括号可以省略。例如,下面三种初 始化赋值方式是等价的: char d[6}={nh,e',1',1,"o3,03} char d[6=hello) char d[6=hello 后两种方法比较符合用户的习惯
C++程序设计 湖南大学 杜四春、银红霞 对于字符型数组的初始化,除了上面介绍的将数 组中的元素一个一个赋值为字符的方式外,还可以有 另外一种方式,即将整个字符型数组一次性赋值为一 个字符串,此时花括号可以省略。例如,下面三种初 始化赋值方式是等价的: char d[6]={ ’h’ , ’e’ , ’l’ , ’l’, ’o’ , ’\0’ }; char d[6]={”hello”}; char d[6]=”hello”; 后两种方法比较符合用户的习惯
C++程序设计 湖南大学 杜四春、银红霞 要注意的是:单个字符用单括号括起来,而字符 串用双括号括起来,组成字符串的字符除显示给出的 外,还包括结尾处标识字符串结束的符号“02。所以 上例中的字符串“ hello实际上包含6个字符:“h, e’,‘1,(1,“o,‘0。如果将上例定义成 如下形式就错了: char d5=hello 或 char d[]hello?) 此时,最后一个字符“03未能放入d数组中,而是 存放到d数组之后的存储单元中。这种错误编译器检查 不出来,但由于改写了数组空间以外的内存单元,就 可能会破坏其他数据区或程序本身。在用户编写程序 时,一定要注意避免这样的情况发生
C++程序设计 湖南大学 杜四春、银红霞 要注意的是:单个字符用单括号括起来,而字符 串用双括号括起来,组成字符串的字符除显示给出的 外,还包括结尾处标识字符串结束的符号‘\0’ 。所以 上例中的字符串“hello”实际上包含6个字符:‘h’ , ‘ e’ , ‘l’ , ‘l’ , ‘ o’ , ‘\0’ 。如果将上例定义成 如下形式就错了: char d[5]=”hello”; 或 char d[5]={”hello”}; 此时,最后一个字符‘\0’未能放入d数组中,而是 存放到d数组之后的存储单元中。这种错误编译器检查 不出来,但由于改写了数组空间以外的内存单元,就 可能会破坏其他数据区或程序本身。在用户编写程序 时,一定要注意避免这样的情况发生