​*const T​​和​​*mut T​​在Rust中被称为“裸指针”

可以绕过Rust的安全保障

有一些你需要记住的裸指针不同于其它指针的地方。它们是:

  • 不能保证指向有效的内存,甚至不能保证是非空的(不像​​Box​​和​​&​​);
  • 没有任何自动清除,不像​​Box​​,所以需要手动管理资源;
  • 是普通旧式类型,也就是说,它不移动所有权,这又不像​​Box​​,因此Rust编译器不能保证不出像释放后使用这种bug;
  • 缺少任何形式的生命周期,不像​​&​​,因此编译器不能判断出悬垂指针;
  • 除了不允许直接通过​​*const T​​改变外,没有别名或可变性的保障。



fn main() {   
let x = 5;
let raw = &x as *const i32;
//当你解引用一个裸指针,你要为它并不指向正确的地方负责。为此,你需要unsafe:
let points_at = unsafe { *raw };
println!("raw points at {}", points_at);
}