一般来说,我知道像Java这样的强类型语言通常不允许在单个数组中使用多种数据类型。
我想知道为什么就数据结构而言(存储在内存中),单个数组中不可能有多种数据类型。
不同的数据类型将持有不同的位吗?由于有了这个索引元素,多个数据类型数组会出现问题吗?
答案 0 :(得分:0)
所有强类型语言在编译时都会生成虚拟地址空间。 Java编译器等强类型语言,Java编译器应该知道数据时间,以便它将创建地址空间。其全部取决于编译器。检查所有分配,无论是显式分配还是通过方法调用中传递的参数分配,都具有类型兼容性。像某些语言一样,没有自动更正或冲突类型的转换。
谢谢,
拉姆
答案 1 :(得分:0)
很好的问题。
数组通常意味着您可以在固定时间内按索引访问数组中的任何元素,即O(1)。
在C / C ++中,如果创建200个32位整数的数组,它们都将存储在 连续的内存位置。
因此,如果要访问第10个元素,则可以将第10个元素的内存地址计算为
base address of the array + 4 * 9
。然后在该地址读取32个字节作为第十个整数。 a[9]
就是这样做的。
假设您允许在数组中存储不同类型的元素,那么您将无法执行此地址跳转,因为不同类型的项目将具有不同的大小,并且您不知道要乘以什么。
这违反了在O(1)中可以找到项目的承诺。
这就是为什么即使有可能,我们也不会将不同类型的项目放入数组中。绝对有可能做到。