为什么在单个数组中不可能出现多种数据类型?- 数据结构



我一般而言,我知道单个数组中的多种数据类型在像Java这样的强类型语言中通常是不允许的。

我想知道为什么在数据结构(存储在内存位置)方面,从技术上讲,单个数组中的多种数据类型是不可能的。

不同的

数据类型会保存不同的位吗?由于这个索引元素会成为多数据类型数组的问题吗?

所有强类型语言在编译时都会生成虚拟地址空间。强类型语言如C,Java编译器应该知道数据时间,以便创建地址空间。它都依赖于编译器。所有赋值(无论是显式赋值还是通过方法调用中的参数传递)都会检查类型兼容性。没有像某些语言那样冲突类型的自动更正或转换。

谢谢
公羊

非常好的问题。

数组

通常意味着您可以在恒定时间内通过索引访问数组中的任何元素,即 O(1)。

在 C/C++ 中,如果创建 200 个 32 位整数的数组,它们都存储在连续的内存位置。

因此,如果要访问第 10 个元素,您可以将第 10 个元素的内存地址计算为

base address of the array + 4 * 9 .然后将该地址处的 32 个字节读取为第 10 个整数。这就是a[9]所做的。

假设您允许在数组中存储不同类型的元素,您将无法进行此地址跳转,因为不同类型的项目将具有不同的大小,并且您不知道要乘以什么。

这打破了可以在 O(1) 中找到项目的承诺。

这就是为什么我们不会将不同类型的项目放在数组中,即使可能。绝对可以做到。

相关内容

  • 没有找到相关文章

最新更新