Pointers 对整型框的引用和对rust中整型的引用之间的区别?

Pointers 对整型框的引用和对rust中整型的引用之间的区别?,pointers,reference,rust,mutable,Pointers,Reference,Rust,Mutable,嗯,我最近开始在Rust中编程,我需要帮助。 这是我的密码。它应该引用堆分配的int并更改它的值 let mut boxed_int = box 5; let _ref_to_int = &mut *boxed_int; // why it is &int ??? *_ref_to_int = 10; let mut boxed_int = box 5; let _ref_to_int = &mut boxed_int; *_ref_to_int

嗯,我最近开始在Rust中编程,我需要帮助。 这是我的密码。它应该引用堆分配的int并更改它的值

let mut boxed_int = box 5;
let _ref_to_int   = &mut *boxed_int;   // why it is &int ???
*_ref_to_int      = 10;

let mut boxed_int = box 5;
let _ref_to_int   = &mut boxed_int;
*_ref_to_int      = box 10;
最后一行是否从堆中删除5,并在同一地址分配10?
或5未被删除,现在指针指向堆上的另一个地址,其值为10

let mut boxed_int:   Box<int> = box 5;
let mut _ref_to_int: &mut int = &mut *boxed_int;      // (1)
*_ref_to_int = 10;

let mut boxed_int:   Box<int> = box 5;
let mut _ref_to_int: &mut Box<int> = &mut boxed_int;  // (2)
*_ref_to_int = box 10;
let mut boxed_int:Box=Box 5;
让mut _ref_to_int:&mut int=&mut*装箱的_int;//(1)
*_ref_to_int=10;
让mut boxed_int:Box=Box 5;
让mut _ref_to_int:&mut Box=&mut boxed_int;//(2)
*_参考第10框至第10框;
一个小的回顾:
是一个封装堆分配的智能指针。它分配足够的空间来存储其包含类型的值,并跟踪该内存,当它超出范围时将其释放。本质上,这提供了类似于值的语义

在(1)中的第一段代码中,您借用了
boxed\u int
内容:首先,
*
取消引用
Box
,获得
int
,然后
&mut
立即创建一个引用,从而产生
&mut int
。当然,
*\u ref\u to\u int=10
会覆盖框中的内容,因此
boxed\u int
之后将包含10。这里没有分配或取消分配

在(2)中的第二段代码中,您借用了
boxed_int
本身,因此
\u ref_to_int
类型为
&mut Box
<代码>*\u ref\u to\u int=box 10然后替换已装箱的值本身。由于旧的装箱值立即超出范围,因此会调用其析构函数,并释放相应的堆内存。然后在堆上分配一块新内存,并写入指向它的指针,而不是刚刚释放的内存(
框10

所以

最后一行是否从堆中删除5,并在同一地址分配10

是和否。最后一行从堆中删除5并分配10,但当然不是在同一地址。实际地址可能会有所不同,但您不会注意到它,因为
Box
不会显示其数值