指针类型

所有指针都是显式的第一类值。它们可以移动或复制,存储到数据结构中,并从函数返回。

引用 (&&mut)

语法
引用类型 :
   & 生命周期? mut? 无约束类型组

共享引用 (&)

共享引用指向由某个其他值拥有的内存。创建一个值的共享引用时,它会防止直接修改该值。 内部可变性 在某些情况下提供了一个例外。 顾名思义,可能存在对一个值的任意数量的共享引用。共享引用类型写作 &type ,或者在需要指定显式生命周期时写作 &'a type 。 复制引用是一个 "浅层" 操作:它只涉及到指针本身的复制,也就是说,指针是 Copy 的。 释放引用对它所指向的值没有影响,但引用 临时值 将在引用本身的作用域中保持其活动状态。

可变引用 (&mut)

可变引用指向由某个其他值拥有的内存。可变引用类型写作 &mut type&'a mut type 。 可变引用 (未被借用的) 是访问它所指向的值的唯一方式,因此不是 Copy

原始指针 (*const and *mut)

语法
原始指针类型 :
   * ( mut | const ) 无约束类型组

原始指针是非安全性或生存期保证的指针。原始指针写作 *const T*mut T 。 例如, *const i32 意味着一个指向 32 位整数的原始指针。复制或丢弃原始指针不会对任何其他值的生命周期产生影响。 解引用原始指针是一个 unsafe 操作 。这也可以用于通过重新借用它 (&*&mut *) 将原始指针转换为引用。 通常不建议使用原始指针;其存在是为了支持与外部代码的互操作性,以及编写关键性能或低层的函数。

当比较原始指针时,是通过它们的地址进行比较,而不是通过它们所指向的内容进行比较。 当将原始指针与 动态大小类型 进行比较时,它们还会比较所附加的数据。

可以使用 core::ptr::addr_of! 创建 *const 指针和 core::ptr::addr_of_mut! 创建 *mut 指针来直接创建原始指针。

智能指针

标准库包含除了引用和原始指针之外的其他 '智能指针' 类型。