为什么数组必须具有相同大小的每个元素?

时间:2014-05-04 06:44:57

标签: c

在特定情况下,使用

形式的数组肯定会很方便

| 1个字| 2个字| 2个字| 2个字| 2个字| 1个字| 1个字| ....

例如,当您想要指向链接列表时,使用开始/结束但是,当begin是空指针时,您不需要结束指针。

编程语言(如C / C ++)或计算机是否有可能支持这样的概念?

2 个答案:

答案 0 :(得分:2)

C或C ++中的数组不可能这样做,因为数组元素的内存地址仅根据数组的地址,偏移量和元素的大小来计算。如果元素具有可变大小,那么您需要扫描数组并检查每个元素,以便在任何给定地址找到对象。

那就是说,我没有看到任何理由为什么你不能定义一个像你想要的类似行星的对象。它只有O(n)索引而不是O(1)。

答案 1 :(得分:1)

有许多语言都有阵列,其中元素的大小不同。显然,C / C ++不是那些语言之一。

只要你使用指针和单词的语言,你就会用低级语言来思考。在这种语言中(并且存在许多语言)数组元素在存储器中连续布局,并且索引到数组中使用简单的算术。利用这种方案,每个阵列元件占据固定大小的槽。每个元素的大小可能会有所不同(例如使用union或variant记录类型),但插槽的大小不能。

如果你放弃这些概念并考虑更高级别的语言,不同大小的数组元素是很正常的。 Java,C#,JavaScript,Ruby,Python和Perl等语言都提供字符串数组,数组数组和大小不同的其他类型的数组。他们通过将用于存储值的内存与用于索引的内存分开来实现此目的。