不可变引用
引用 (Reference) – 引用其他数据的不可变指针。
当引用指向某个值,我们称为“借用”这个值,因为是被不可变的借用,所以不能被修改,也不能移动。
借用一直持续到生命周期结束,即离开作用域。
fn main() {
let mut a = 4; // 定义变量 a 并赋值为 4
let ref_a: &i32 = &a; // ref_a 借用了 a,ref_a 指向 a。
println!("{}", a); // `a` 还可以继续使用(可读)
println!("{}", *ref_a); // 解引用(获取值)
a = 3; // 编译报错,因为 a 已被 ref_a 借走了(不可写)
*ref_a = 6; // 编译报错,因为 ref_a 是不可变引用
}
可变引用
可变引用 (Mutable reference)。
当一个变量被可变地借用时,也不可使用。
fn main() {
let mut a = 4; // 定义变量 a 并赋值为 4
let ref_a: &mut i32 = &mut a; // ref_a 借用了 a,ref_a 指向 a。之后 a 不可用
println!("{}", a); // 编译报错,a 被可变借用。
println!("{}", *ref_a); // 解引用(获取值)
a = 3; // 编译报错,因为 a 已被 ref_a 可变借走了
*ref_a = 6; // 解引用并重新赋值
println!("{}", *ref_a); // 解引用(获取值)
}