什么是数组
数组(array),是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。
组成数组的各个变量称为数组的分量,也称为数组的元素(element),有时也称为下标变量。
用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按无序的形式组织起来的一种形式。
数组,是由相同类型的元素的集合所组成的数据结构,分配一块连续的内存来存储。利用元素的索引(index)可以计算出该元素对应的存储地址。
数组是最早期和最重要的数据结构之一,很多程序都会用到数组。
它们也用于实现许多其他数据结构,譬如列表(list)和字符串(string)。
一维数组
一维数组是计算机程序中最基本最简单的数据结构类型,由数字组成的以单纯的排序结构排列的结构单一的数组。
一维数组常规操作
静态一维数组
1 | cout << "静态创建一维数组" << endl; |
动态一维数组
1 | cout << "动态创建一维数组" << endl; |
二维数组
二维数组本质上是以数组作为数组元素的数组,即“数组的数组”。
二维数组的常规操作
静态二维数组
1 | cout << "静态创建二维数组" << endl; |
动态二维数组
1 | cout << "动态创建二维数组" << endl; |
多维数组
三维及其以上的数组称为多维数组,三维数组具有高、宽、深的概念,或者说行、列、层的概念,由于其可以用来描述三维空间中的位置或状态而被广泛使用。
多维数组的常规操作
静态多维数组
1 | cout << "静态创建多维数组" << endl; |
动态多维数组
1 | cout << "动态创建多维数组" << endl; |
元素标识符和定址公式
首先我们先明确几个概念
- 数组名 = 数组首元素地址 = 元素基址
- 元素地址 = 元素基址 + 元素下标
- 元素基址 + 元素下标 的值 会被解析成 定址公式
- 元素标识符和定址公式体现出了数组的内存连续性
下面所有代码全部使用”下标优先”规则,并且内存连续,实际实现 二维 多维数组和本例子可能有所不同,比如可能维度之间内存不连续等,以下例子只为表达概念。
1 | //验证一维数组 定址公式 = (a1+0) + i * sizeof(DataType) |
总结
数组就是数量固定且类型相同的元素集合。
数组的的内存空间是连续的,有规律的,所以可以直接使用下表访问相应的元素。
数组的查询是非常快的,因为它可以直接根据下标计算出内存地址,不用像 链表 一样,每次查询都需要遍历。
数组的插入和删除是比较慢的,因为每次插入或删除一个元素的时候,都需要重新维护序号指针,除非操作的是最后一个元素。


