我一般而言,我知道单个数组中的多种数据类型在像Java这样的强类型语言中通常是不允许的。
我想知道为什么在数据结构(存储在内存位置)方面,从技术上讲,单个数组中的多种数据类型是不可能的。
不同的数据类型会保存不同的位吗?由于这个索引元素会成为多数据类型数组的问题吗?
所有强类型语言在编译时都会生成虚拟地址空间。强类型语言如C,Java编译器应该知道数据时间,以便创建地址空间。它都依赖于编译器。所有赋值(无论是显式赋值还是通过方法调用中的参数传递)都会检查类型兼容性。没有像某些语言那样冲突类型的自动更正或转换。
谢谢
公羊
非常好的问题。
数组通常意味着您可以在恒定时间内通过索引访问数组中的任何元素,即 O(1)。
在 C/C++ 中,如果创建 200 个 32 位整数的数组,它们都存储在连续的内存位置。
因此,如果要访问第 10 个元素,您可以将第 10 个元素的内存地址计算为
base address of the array + 4 * 9
.然后将该地址处的 32 个字节读取为第 10 个整数。这就是a[9]
所做的。
假设您允许在数组中存储不同类型的元素,您将无法进行此地址跳转,因为不同类型的项目将具有不同的大小,并且您不知道要乘以什么。
这打破了可以在 O(1) 中找到项目的承诺。
这就是为什么我们不会将不同类型的项目放在数组中,即使可能。绝对可以做到。