我使用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函数?
答案 0 :(得分:11)
在D中,数组实际上是(概念上)这个:
password
从数组中获取指针的常用方法是使用.ptr字段。在您的情况下:struct {
size_t length;
void* ptr;
};
但是这个指针不会只指向第一个元素
因为元素是连续存储在内存中的,所以我们需要一个指向第一个元素的指针。如果我们想获取其他元素的地址,我们只需为该指针添加一个偏移量。
另一点:通常如果C函数想要一个数组指针,它也有一个数组长度的参数。在大多数情况下,你可以给它myCFunction(dArray.ptr);
,但有时它实际上要求的是字节大小,而不是元素的数量。