不安全的原始指针



若要取消引用原始指针,必须使用unsafe代码。在哪些情况下,可以使用(并且可能有用(完全不涉及使用unsafe代码的原始指针?

几乎唯一能做的就是将原始指针强制转换为一个usinze。您可以使用它来执行一些操作,例如将数组中的索引从引用获取到数组中。

fn get_index_in_array(array: &[i32], item: &i32) -> usize {
let array_ptr: *const i32 = array.as_ptr();
let item_ptr: *const i32 = item;

let distance = ((item_ptr as usize) - (array_ptr as usize)) / std::mem::size_of::<i32>();
assert!(distance < array.len());
distance
}
fn main() {
let arr = [1, 2, 3, 4];

println!("{}", get_index_in_array(&arr, &arr[2]));
}
2

最新更新