我看到一些代码如下所示:
fn test <'a> (&'a mut &'a str) {}
我知道 'a 是一生,而 & 是引用。
但是我很难理解双重引用 && 。
根据我的理解,引用是一个指针,那么 && 是指向另一个指针还是其他指针的指针?
根据我的理解,引用是一个指针
是的,引用只是一个具有特殊借用检查语义的指针。指针和引用只是内存中的地址(有时还有尺寸 https://stackoverflow.com/q/57754901但这与这个答案无关),这意味着它们本质上有自己的价值,与它们“指向”或“引用”的价值分开。这就是为什么这样的代码可以工作:
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
}
引用下的值不会更改,但引用本身会更改。
So, &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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)