好的,所以我想出了一个简单的方法来实现这一目标。
我们首先使用calloc为数组分配内存:
double* c_func(int n_rows) {
double* result;
result = calloc(n_rows, sizeof(double));
for (int i = 0; i < n_rows; ++i) {
result[i] = (double)i;
}
return result;
}
之后,我们只需在 Go 中将数据转换为正确的类型。诀窍是使用C.free释放从 C 端分配的内存。
// convert C double pointer to float64 slice ...
func doubleToFloats(in *C.double, size int) []float64 {
defer C.free(unsafe.Pointer(in))
out := (*[1 << 30]float64)(unsafe.Pointer(in))[:size:size]
return out
}
MYYA
慕丝7291255
相关分类