当前位置:嗨网首页>书籍在线阅读

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章时,将会了解如何使用原始指针。