jyt*_*234 5 c arrays pointers d
我正在使用D并与一些C库连接.因此,我必须将D数组转换为C的指针(例如short*).目前我只是像这样投射他们:
int[] dArray = [0, 1, 2, 3, 4];
myCFunction(cast(int*) dArray);
Run Code Online (Sandbox Code Playgroud)
这不安全吗?我试着这样做:
myCFunction(&dArray);
Run Code Online (Sandbox Code Playgroud)
但这样做会给函数一个int []*而不是int*.我看到在C++中有些人采用这样的第一个元素:
myCFunction(&dArray[0]);
Run Code Online (Sandbox Code Playgroud)
但是那个指针不会只指向第一个元素吗?因为我来自Java世界,所以我不熟悉指针和参考.
如何将数组转换为指针,以便将其传递给C函数?
Cau*_*ite 11
在D中,数组实际上(概念上)是这样的:
struct {
size_t length;
void* ptr;
};
Run Code Online (Sandbox Code Playgroud)
从数组中获取指针的常用方法是使用.ptr字段.在你的情况下:myCFunction(dArray.ptr);
但是这个指针不会只指向第一个元素
因为元素是连续存储在内存中的,所以我们需要一个指向第一个元素的指针.如果我们想获取其他元素的地址,我们只是为该指针添加一个偏移量.
另一点:通常如果C函数想要一个数组指针,它也有一个数组长度的参数.在大多数情况下,你可以给它dArray.length,但有时它实际上要求的是字节大小,而不是元素的数量.