import std.stdio;
void main() {
int[] a = [1,2,3,4,5,6,7,8,9,10];
write(a.sizeof);
}
在下面的代码中,静态数组的sizeof等于8字节。我使用x86 Windows 8,因此指针等于4个字节。 为什么我得到8字节大小的数组?
答案 0 :(得分:9)
因为int[]
是动态数组,而不是指针。 D中的数组不是指针。它们本质上是什么
struct(T)
{
T* ptr;
size_t length;
}
因此,如果你想要底层指针,你需要使用数组的ptr
成员,尽管通常只有在与C / C ++代码交互时才需要(因为动态数组在C / C ++ 只是指针)。但是,length
成员一直在使用,并且有助于使D中的数组比C / C ++中的数组更强大,更令人愉快。如果您想更多地了解D中的数组,那么您应该阅读this article。它详细介绍了它们,我认为这对所有D程序员来说都是必读的。
无论如何,sizeof
给你的是ptr
和length
的大小,在32位系统上是8
,16
在64位系统上。
答案 1 :(得分:7)
动态数组(你拥有的)实际上是一个带有指针和size_t
长度的结构,在你的CPU上都是4。
这允许D携带数组的长度以避免越界读写(如果启用了检查)和O(1)
切片操作。