此问题在此处已有答案:
What's the difference between placing "mut" before a variable name and after the ":"?(4个答案)
21天前关闭。
fn main() {
let mut x = 42;
let y = &x;
*y = 5;
}
这不能编译。为什么它必须是&mut
到x
?在我的理解中,引用(即存储x
的值的地址)不会改变,只有存储在该地址上的值会改变。而x
是mut
。
※编译:
fn main() {
let mut x = 42;
let y = &mut x;
*y = 5;
}
1条答案
按热度按时间gzszwxb41#
&mut
的意思是一个值可以通过它发生变异的引用,而不是一个本身可以发生变异的引用。&
表示一个值不能通过它发生变异的引用。一个本身可以发生变异的引用可以写成let mut y = &x;
这样的形式(尽管在实践中这并不常见)。在我的理解中......引用(即存储x值的地址)......
我认为这里的混乱源于这样一个事实,即引用与内存地址或指针并不完全相同。它更概念化,并提供更多的保证--例如,引用将始终指向给定类型的有效对象。