C语言数组

1 数组

学习了变量,我们知道变量在程序设计中的重要性。例如建造一栋大楼,一个变量如同一块砖头,最终,一栋大楼由大量的砖头构成。

那么,我们现在学习数组,它是变量的另一种表现形式,可以说是变量的“集合”,在程序设计中有重要的地位。后面我们学习顺序表和链表,我们知道,数组,其实也是一种数据存储的结构。

2 引出数组的定义

所谓数组,从名字来看,就是一组数据。例如,有这样的一组数据:

{100, 88, 99, 200, 600, 800}

这一组数据有6个数,我们学习了整数变量,那么,可以定义一个int类型的整数变量来存放一个数值,那么,6个数值,就可以定义6个整形变量来存放数据。程序测试例如:

C语言数组

 

程序运行的结果如下:

C语言数组

 

可以看到,我们定义了a, b, c, d, e, f变量来存放{100, 88, 99, 200, 600, 800}这一组数值。现在存放的数值才有6个,还比较少,如果有10000个数值呢?是否需要定义10000个变量?

这个时候,我们可以使用数组来解决定义10000个变量,存放10000个数值的问题。

C语言提供了“数组”的定义,就是可以定义一块连续的内存。然后,可以把数据存放到内存块中,如下图:

100

88

99

200

600

800

此时,有6个连续的空间,存放了6个数值。在讲解变量的时候,我们提到一房一厅、两房一厅的房子,变量名只是房号,房子才是实际的空间。

对于数组,我们可以认为是有N个房间的房子,就是在一个房子里面,分出N个房间。那么,对于{100, 88, 99, 200, 600, 800}这一组数值,我们可以认为这是一个6个房间的房子,在房子中,有6个小房间,每个小房间存放一个数值。

此时,我们很直观地感受到数组在内存中的存在形式和数据的存放形式。下面讲解数组的定义和使用。

3 一维数组定义和使用

一维数组的定义格式如下:

数据类型  数组名 [常量值];

格式分析:

(1) 数据类型,表示要在数组中,存放数据的类型。例如,要存放整数值,可以是int类型;要存放字符,可以是char类型;

(2) 数组名,是数组的名称,必须是合法的标识符;就是数组变量的名称,与普通的变量名一样,必须是合法的标识符。

(3) 常量值,表示数组的长度,就是数组的元素个数;注意:它是“常量”的属性,例如30这样的常整数。不可以是变量。

那么,对于上面引出问题的例子,我们需要存放{100, 88, 99, 200, 600, 800}这样的一组数据,可以分析:

(1) 存放数据的类型是整数值,所以,元素的数据类型是int类型;

(2) 有6个数值,所以,数组需要6个元素来存放这些数据,所以,数组的长度是6;

(3) 选择一个合法的标识符作为数组名,我们可以定义数组名为 array;

那么,我们可以定义数组:

int array[6];

此时,我们就定义了一个数组,有:

(1) 数组名是array;

(2) 数组中存放元素的类型是int类型;

(3) 数组中存放元素的个数是6个;

此时,我们定义了数组,那么,要怎么样使用数组中的元素?把{100, 88, 99, 200, 600, 800}这样的一组数据存放到数组中?

那么,我们就需要学习:数组元素的使用

数组元素使用的格式如下:

数组名[下标];

使用格式说明:

(1) 数组名,就是定义数组时候的数组名;

(2) 下标只能够是整数值,可以是6这样的常整数值,也可以是 int i = 6; 这样的整数变量。

(3) 下标取值的范围是从0开始,如果数组的长度是N个元素,那么,下标取值的最大值是N-1,所以,数组的长度是N个元素,那么,下标取值范围是(0 ~ N-1)。

假设我们定义了一个数组,数组的名称是array,在数组中存放了{100, 88, 99, 200, 600, 800}这样的一组数据,那么,数据在内存中存放的格式如下:

C语言数组

此时,数组名指向内存块的首地址,然后,下标从0开始获取元素,就有:

array[0] --- 表示第0个元素,即100这个数值;

array[1] --- 表示第1个元素,即88这个数值;

array[2] --- 表示第2个元素,即99这个数值;

array[3] --- 表示第3个元素,即200这个数值;

array[4] --- 表示第4个元素,即600这个数值;

array[5] --- 表示第5个元素,即800这个数值;

array[6] --- 表示第6个元素,异常,数组越界;因为,不存在第6个元素;

可以看到,下标从0开始,然后数组名 array和下标,就可以访问数组中指定的元素。注意:array数组的长度是6,所以,下标的合法范围是0 ~ 5;对于array[6]元素,是不存在,这样访问数组,会导致内存溢出,程序溢出。所以,在使用数组的时候,必须特别注意数组下标的使用,不要访问数组越界。

那么,我们编写一个测试例子,把{100, 88, 99, 200, 600, 800}这组数据存放到一个数组中,程序测试例子如下:

C语言数组

 

程序运行的结果如下:

C语言数组

 

可以看到,我们把一组数据存放到数组中,然后,再访问数组中的每一个元素,打印输出。例如 array[2] = 99;就是给下标是2的元素赋值;下标可以是一个变量,例如,输出元素的时候,是访问array[i]元素,此时,下标是int类型的变量。