本篇文章主要是讲在我们C语言中,重要的知识:数组。人生,就是一场自己与自己的较量(哈哈哈),为了开发更快捷、更方便,那么今天开始我们走就进C语言的重点知识点。数组可以说是目前为止讲到的第一个真正意义上存储数据的结构。不仅如此,数组和指针是相辅相成的,学习数组可以为学习指针打下基础(点击:C语言中指针的“那些事儿”)。
那么到底什么是数组呢?顾名思义数组就是很多数的组合!(为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组)那么这些数有没有什么要求呢,是不是不管什么数组合在一起都是数组呢?同一数组中存储的数必须满足以下两个条件:
(1)这些数的类型必须相同。
(2)这些数在内存中必须是连续存储的。
换句话说,数组是在内存中连续存储的具有相同类型的一组数据的集合。
一:一维数组
数组中的每个元素都有一个序号,这个序号从0开始,而不是从我们熟悉的1开始,称为下标(Index)。使用数组元素时,指明下标即可,形式为:dataType arrayName[length];
其中,dataType 为数据类型,arrayName 为数组名称,index 为下标。例如,a[0] 表示第0个元素,a[3] 表示第3个元素。
注意的是:
(1)数组中每个元素的数据类型必须相同
(2)数组长度 length 最好是整数或者常量表达式,例如 10、20*4 等,这样在所有编译器下都能运行通过;如果 length 中包含了变量,例如 n、4*m 等,在某些编译器下就会报错
(3)访问数组元素时,下标的取值范围为 0 ≤ index < length,过大或过小都会越界,导致数组溢出,发生不可预测的情况
二:二维数组
二维数组定义的一般形式是:dataType arrayName[length1][length2];
其中,dataType 为数据类型,arrayName 为数组名,length1 为第一维下标的长度,length2 为第二维下标的长度。
二维数组在概念上是二维的,但在内存中是连续存放的;换句话说,二维数组的各个元素是相互挨着的,彼此之间没有缝隙。那么,如何在线性内存中存放二维数组呢?有两种方式:
(1)一种是按行排列, 即放完一行之后再放入第二行;
(2)另一种是按列排列, 即放完一列之后再放入第二列。
在C语言中,二维数组是按行排列的。
三:多维数组
C 语言中的多维数组,其实就是元素为数组的数组。n 维数组的元素是 n-1 维数组。例如,二维数组的每个元素都是一维数组,一维数组的元素当然就不是数组了。
多维数组声明时,每个维度用一对方括号来表示:char screen[10][40][80];
三维数组 screen 包含 10 个元素,从 screen[0] 到 screen[9]。每个元素又是一个二维数组,它有 40 个元素,这 40 个元素均是一维数组,然后每个一维数组内都有 80 个字符。整体来说,screen 数组有 32000(10×40×80)个 char 类型元素。
想要获取该三维数组 screen 内的某个 char 元素,必须指定 3 个索引值。例如,下面的语句把字符Z写入该数组的最后一个元素位置:screen[9][39][79] = 'Z';
四:数组与指针的区别
(1)数组并不是指针。
(2)指针保存的是数据的地址,数组保存数据本身,指针间接访问数据,首先取得指针的内容,把他做为地址,从这个地址提取数据;数组直接访问数据
(3)数组做为函数参数时会退化为指针。