在 Rust 中,* 和 & 是用于指针和引用操作的符号,它们的含义因场景而异。

&: 借用(引用)操作符****

  1. 获取引用: & 用于创建一个引用,借用一个值而不转移其所有权。

** **• &x 表示创建对变量 x 的不可变引用。

** **• &mut x 表示创建对变量 x 的可变引用,前提是 x 本身可以被修改。

  1. 模式匹配: 在模式匹配中,& 也用来匹配引用类型。

*: 解引用操作符****

  1. 解引用: * 用于解引用指针,获取引用所指向的值。

** **• 如果 x 是一个引用(例如 &i32),*x 将获得引用所指向的数据,即 i32 类型的值。

  1. 原生指针: 在操作原生指针(如 *const T 和 mut T)时, 用于解引用指针以读取或写入值。

这两个操作符在 Rust 的借用和所有权模型中扮演着重要角色。

示例

fn main() {
  let x = 5;
  let y = &x; // `y` 是对 `x` 的引用
​
  println!("The value of y is: {}", y); // y 作为引用,自动解引用
  println!("The value of *y is: {}", *y); // 通过 `*y` 解引用,获得 `x` 的值
​
  let mut z = 10;
  let z_ref = &mut z; // 可变引用
  *z_ref = 15; // 通过解引用修改 z 的值
  println!("The value of z is: {}", z); // 输出 15
​
}

在这个示例中,& 用于创建对 x 和 z 的引用,而 * 用于从引用中获取实际值。Rust 的引用系统通过这些符号实现了安全的内存访问和修改。