O que significam os símbolos de ampersand (&) e asterisco (*) em Rust?
Olá a todos! Acabei de começar a aprender Rust e não consigo entender dois operadores: & (ampersand) e * (asterisco). Em outras linguagens, como C++, estou acostumado que & é para obter o endereço e * é para desreferenciar um ponteiro. Mas em Rust é tudo um pouco diferente.
Por exemplo, escrevi um programa simples que tenta alterar o valor de uma variável através de uma função:
fn main() {
let x = 42;
let y = &x;
println!("{}", y); // Funciona, mas o que está acontecendo aqui?
let mut z = 10;
change_value(&z);
println!("{}", z);
}
fn change_value(val: &i32) {
*val = 100; // Erro! Por quê?
}
O compilador reclama da linha *val = 100, diz algo sobre val ser uma referência imutável. Mas estou usando o asterisco para desreferenciar! Por que isso não funciona?
Também não entendo por que às vezes é necessário escrever & antes de uma variável ao passar