Rust 依靠所有权(Ownership)和生命周期(Lifetime)在编译期彻底根除了悬垂指针和数据竞争。但在实现底层驱动或 FFI 互操作时,必须在明确受限的 unsafe 块 中手动保证原始指针解引用的安全性。
一、原始指针读写与未定义行为(UB)边界
rust
fn main() {
let mut num: i32 = 42;
// 安全地创建原始不可变和可变指针
let r1: *const i32 = &num as *const i32;
let r2: *mut i32 = &mut num as *mut i32;
unsafe {
// 解引用原始指针属于 unsafe 操作
*r2 += 10;
println!("Value: {}", *r1); // 52
}
}