从C到D的数组指针

时间:2016-08-22 21:25:24

标签: c arrays pointers d

我使用D并与某些C库连接。因此,我必须将D数组转换为C的指针(例如short *)。目前我只是像这样投射它们:

int[] dArray = [0, 1, 2, 3, 4];
myCFunction(cast(int*) dArray);

这不安全吗?我试着这样做:

myCFunction(&dArray);

但这样做会给函数一个int [] *而不是int *。我看到在C ++中有些人采用这样的第一个元素:

myCFunction(&dArray[0]);

但是这个指针不会指向第一个元素吗?因为我来自Java世界,所以我是指针和参考文献的新手。

如何将数组转换为指针,以便将其传递给C函数?

1 个答案:

答案 0 :(得分:11)

在D中,数组实际上是(概念上)这个:

password

从数组中获取指针的常用方法是使用.ptr字段。在您的情况下:struct { size_t length; void* ptr; };

  

但是这个指针不会只指向第一个元素

因为元素是连续存储在内存中的,所以我们需要一个指向第一个元素的指针。如果我们想获取其他元素的地址,我们只需为该指针添加一个偏移量。

另一点:通常如果C函数想要一个数组指针,它也有一个数组长度的参数。在大多数情况下,你可以给它myCFunction(dArray.ptr);,但有时它实际上要求的是字节大小,而不是元素的数量。