Rust中的与号(&)和星号(*)符号是什么意思?
大家好!我刚开始学习Rust,对两个操作符感到困惑:&(与号)和*(星号)。在其他语言如C++中,我习惯&表示取地址,*表示解引用指针。但在Rust中似乎有所不同。
例如,我写了一个简单的程序,试图通过函数修改变量的值:
fn main() {
let x = 42;
let y = &x;
println!("{}", y); // 能工作,但这里发生了什么?
let mut z = 10;
change_value(&z);
println!("{}", z);
}
fn change_value(val: &i32) {
*val = 100; // 错误!为什么?
}
编译器在*val = 100这一行报错,说val是一个不可变引用。但我用了星号来解引用!为什么这不起作用?
另外,我不理解为什么有时需要在变量前写&。