我看到了一些代码,它长成这个样子:
fn test <'a> (&'a mut &'a str) {}
我知道 'a 是一个生命周期,& 是一个引用。
但是我不太理解双重引用 &&。
据我理解,引用就是指针,那么 && 是指向另一个指针的指针还是其他什么?
fn main() {
let num1 = 1;
let num2 = 2;
let mut num_ref = &num1;
dbg!(num1, num2, num_ref); // num1 and num2 are 1 and 2 and num_ref is &1
num_ref = &num2;
dbg!(num1, num2, num_ref); // num1 and num2 are 1 and 2 and num_ref is &2
}
&mut &T
是一个可变引用指向一个不可变引用,这意味着您可以更改可变引用下面的引用。fn make_reference_one(r: &mut &i32) {
*r = &1;
}
fn main() {
let mut num_ref = &2;
dbg!(num_ref); // is &2
make_reference_one(&mut num_ref);
dbg!(num_ref); // is now &1
}
参考文献下的值会改变,但参考文献本身不会改变。
就像地址指针所在的位置不会改变,但指针指向的值会改变。 @Willem @Aplet - yokus
Box<T>
、Vec<T>
,当然还有像*mut T
这样的 原始指针。你使用的大多数指针都不仅仅是指针。 - trent&&T
,不要与两次调用借用运算符(即&&var
)或布尔运算符(即a && b
)混淆。 - kmdreko