当我们尝试访问数组元素时会发生什么?

What happens when we try to access array elements?

看标题你可能会猜到我的意思。 我正在研究一些对聚合数据类型(如数组)进行操作的算法。我可以非常自信地说我知道数组是什么以及我们为什么要使用它们。但我不知道它们在内部是如何工作的。例如,当我这样做时会发生什么:

anArray [10];

幕后发生了什么?我的计算机是直接达到第 10 个索引(看起来非常有效)还是从 0 开始达到索引 10,然后向前推进直到找到 [10]。如果它直接这样做,那么关联数组呢?关联数组中的键可以是字符串,对吗?计算机是尝试从左到右匹配键,还是直接到达我们用方括号括起来的 index/key。

在普通数组(FORTRAN、C、Java 数组)中,您可以直接访问索引位置,而无需对其他元素进行任何迭代。对于一维数组,数组索引乘以数组成员大小,给出直接内存偏移量(从数组开始计算)。 FORTRAN 使用 equivalence 运算符将 1D 数组放置在 2D 数组(相同的内存位置)上,因此很明显这些是如何放置的。 C也允许通过指针访问数组,很明显内存偏移量只是索引乘以元素的大小。

有些语言确实引入了 'arrays',它们更像其他数据结构(映射)。它们最常通过散列实现 table 并且具有恒定的访问时间 - 比直接访问慢但不太依赖于数组中的元素数量。