18-原始指针
5.8.2 原始指针
这类指针拥有一个比较奇怪的类型签名,其前缀为*,这也恰好是解引用运算符。它们主要用于不安全代码中。人们需要一个不安全的代码块来解引用它们。Rust中有两种原始指针。
- *const T:表示指向类型T的不可变原始指针。它是Copy类型。这类似于&T,只是它可以为空值。
- *mut T:一个指向T的可变原始指针,它不支持Copy特征(non-Copy)。
需要补充说明的是,可以将引用强制转换为原始指针,如以下代码所示:
let a = &56;
let a_raw_ptr = a as *const u32;
// or
let b = &mut 5634.3;
let b_mut_ptr = b as *mut T;
不过我们不能将&T转换为*mut T,因为这违反了只允许进行一次可变借用的借用规则。
对于可变引用,我们可以将它们转换为mut T甚至const T,这被称为指针弱化(我们将更强大的指针&mut T转换成功能较弱的const T指针)。对于不可变引用,我们只能将它们转换为 const T。
但是解引用原始指针是一种不安全的操作。当我们学习第10章时,将会了解如何使用原始指针。