ptr::slice_from_raw_parts() 函数
ptr::slice_from_raw_parts() 以及 ptr::slice_from_raw_parts_mut() 函数用于手动构造切片引用. 它们的函数接口如下:
pub const fn slice_from_raw_parts<T>(data: *const T, len: usize) -> *const [T];
pub fn slice_from_raw_parts_mut<T>(data: *mut T, len: usize) -> *mut [T];
用法也比较简单, 看一个示例:
use std::{mem, ptr};
fn main() {
let numbers = [1, 1, 2, 3, 5, 8];
let len: usize = numbers.len();
let num_ptr: *const i32 = numbers.as_ptr();
let num_raw_ref: *const [i32] = ptr::slice_from_raw_parts(num_ptr, len);
let num_ref: &[i32] = unsafe {
&*num_raw_ref
};
assert_eq!(num_ref, [1, 1, 2, 3, 5, 8]);
let num_ref2: &[i32] = unsafe { mem::transmute::<(*const i32, usize), &[i32]>((num_ptr, len)) };
assert_eq!(num_ref, num_ref2);
}
上面的代码中展示了两种构造切片引用的方法:
ptr::slice_from_raw_parts(num_ptr, len);unsafe { mem::transmute::<(*const i32, usize), &[i32]>((num_ptr, len)) }