// 安全 Rust(编译器完全检查)
fn safe_fn() {
let x = 5;
let y = &x;
println!("{}", y);
}
// 不安全 Rust(开发者需自行保证安全)
unsafe fn unsafe_fn() {
let x = 5;
let y = &x as *const i32;
println!("{}", *y); // 解引用裸指针需要 unsafe
}
2. 为什么需要 Unsafe?
与硬件/操作系统交互:直接内存访问、CPU 指令
性能优化:绕过边界检查
实现特定数据结构:如自引用结构、零成本抽象
调用外部代码:C 语言 FFI
二、Unsafe 的五大超能力
1. 解引用裸指针 (Raw Pointers)
let mut x = 10;
// 创建裸指针(安全操作)
let ptr_raw: *const i32 = &x as *const i32;
let ptr_mut: *mut i32 = &mut x as *mut i32;
unsafe {
// 解引用裸指针(不安全操作)
println!("Raw pointer value: {}", *ptr_raw);
*ptr_mut = 20; // 修改值
}