数组

这一节学到的是,为什么很多编程语言中数组都从 0 开始编号。

用比较术语话来讲,数组是一种线性表数据结构,是用一组连续的内存空间,来存储一组具有相同类型的数据。

数组可以进行随机访问,也就是我们可以根据下标随机访问到对应的数组元素。这一定主要是取决于数组的寻址公式。

1
a[i]_address = base_address + i * data_type_size

当我们访问下标为 i 的元素时,根据上述式子,就可以很快得到对应的地址了。事实上,数组下标如果理解成偏移量的话,则很明确了。比如下标为 0 的元素,则是 0 偏移量的一个地址。假如数组是从 1 下标开始的话,那么上述式子则会成为

1
a[i]_address = base_address + (i - 1) * data_type_size

每一次运算,都需要先进行一个减法运算。而数组作为一种基础类型使用,很没必要消耗在这上班。

上述是一维数组的。那么二维数组的呢?

如果是一个 m * n 的数组,那么 a[i][j] 的地址则为

1
a[i][j]_address = base_address + (i * n + j) * data_type_size

对于数组的越界而言,其实就是访问该数组连续内存外的地址。