锈双&,&&

  • 本文关键字:锈双 pointers rust
  • 更新时间 :
  • 英文 :


我看到一些代码,看起来像这样:

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
}

相关内容

  • 没有找到相关文章

最新更新