为什么&array!=&array [0]?

mal*_*ree 4 arrays memory-management d

在C:

int a[10];
printf("%p\n", a);
printf("%p\n", &a[0]);
Run Code Online (Sandbox Code Playgroud)

产量:

0x7fff5606c600
0x7fff5606c600
Run Code Online (Sandbox Code Playgroud)

这是我的期望.现在,在D中,我正在尝试这个(显然没有用例,只是鬼混):

int[] slice = [...];
writeln(&slice);
writeln(&slice[0]);
Run Code Online (Sandbox Code Playgroud)

产量:

7FFF51600360
10E6E9FE0
Run Code Online (Sandbox Code Playgroud)

为什么不同?看起来像一个完全不同的内存段.(虽然我刚想到D中的数组可能不仅仅是相邻分配的内部?)

rat*_*eak 12

在D中,数组本质上是一个带有指针和长度字段的结构,并且被视为这样

要获取第一个元素的地址,您可以查询ptr字段

  • 动态数组也是如此,具有静态长度的数组(例如int [10])就像在C中一样工作. (4认同)
  • @ AdamD.Ruppe:您仍然应该使用`.ptr`来获取指向第一个元素的指针.此外,值得注意的是静态数组是通过函数参数的值传递的,即整个数组被复制. (3认同)