[英]How to get a raw pointer *mut f32 from a rust vector Vec<[f32;3]>?
我是 Rust 的新手,我正在努力将我的 Rust 代码与 C 库连接起来。 该库需要一个指向大小为 3*N 的内存缓冲区的原始指针*f32
。 在 Rust 代码中,我有一个大小为 N 的数组Vec<[f32;3]>
。如何从该数组中获取*mut f32
类型的原始指针?
let coords: Vec<[f32;3]> = vec![[0.0,0.0,0.0]; N];
// Call a wrapper of C function expecting a raw pointer *mut f32
wrapped_c_function(coords.????, 3*N);
我尝试coords.as_mut_ptr()
但由于类型不匹配而无法正常工作:
mismatched types
expected raw pointer `*mut f32`
found raw pointer `*mut [f32; 3]`
所以我需要“展平”数据,将其视为指向平面 f32 缓冲区的指针。 这样做的正确方法是什么?
因为数组在内存中是扁平的,所以指针*mut f32
指向N * 3
元素的布局与*mut [f32; 3]
相同。 *mut [f32; 3]
N
个元素。 因此,您可以cast()
:
let ptr: *mut f32 = coords.as_mut_ptr().cast::<f32>();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.