数组数据结构的元素必须具有相同的大小,并且应使用相同的数据表示。这背后的原因是什么?
答案 0 :(得分:2)
不可能提供涵盖所有语言的解释,但您所指的是支持数组的语言中的标准。
大多数语言的一个关键要求是数组访问应该非常有效。这通常通过使阵列的元素占据连续的存储块并使阵列的所有元素占据相同的大小来完成。这允许在给定索引和元素大小的情况下通过简单算术确定任何元素的位置。
例如,如果您有声明
,请在C中int a[10];
然后元素a[i]
位于
&a + i*sizeof(int)
in words:第一个元素的地址(&
是C中的地址运算符,C中的数据地址是第一个元素的地址)加上i
倍的大小一个int
。
如果数组的元素具有不同的大小,您需要找到一些耗费内存的方法来分隔元素,然后使用搜索来定位实际的元素。
作为一个类比,如果你住在一个街道上,每个房子占据很多固定的大小,那么简单的算术可以告诉你从街道的尽头走到有给定地址的房子有多远(假设地址中没有空隙)。另一方面,如果你有大型豪宅以随意的方式穿插着小棚屋,那么你真的没有简单的方法来提前确定你需要到达特定地址的距离。
表面上似乎有些语言更灵活。例如,赋值A = Array(1, 2.0, "hello world")
在VBA中完全有效 - 但这里发生的是A
是Variants
的数组 - 它们是固定大小的结构,包括诸如类型标签和指向实际数据的指针。