Avatar ·

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是一个不可变引用。但我用了星号来解引用!为什么这不起作用?

另外,我不理解为什么有时需要在变量前写&。