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