在 Rust 中,* 和 & 是用于指针和引用操作的符号,它们的含义因场景而异。
&: 借用(引用)操作符****
- 获取引用: & 用于创建一个引用,借用一个值而不转移其所有权。
** **• &x 表示创建对变量 x 的不可变引用。
** **• &mut x 表示创建对变量 x 的可变引用,前提是 x 本身可以被修改。
- 模式匹配: 在模式匹配中,& 也用来匹配引用类型。
*: 解引用操作符****
- 解引用: * 用于解引用指针,获取引用所指向的值。
** **• 如果 x 是一个引用(例如 &i32),*x 将获得引用所指向的数据,即 i32 类型的值。
- 原生指针: 在操作原生指针(如 *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 的引用系统通过这些符号实现了安全的内存访问和修改。
评论