¿Qué significan los símbolos de ampersand (&) y asterisco (*) en Rust?
¡Hola a todos! Acabo de empezar a aprender Rust y no logro entender dos operadores: & (ampersand) y * (asterisco). En otros lenguajes, como C++, estoy acostumbrado a que & es tomar la dirección y * es desreferenciar un puntero. Pero en Rust es diferente.
Por ejemplo, escribí un programa simple que intenta cambiar el valor de una variable a través de una función:
fn main() {
let x = 42;
let y = &x;
println!("{}", y); // Funciona, pero ¿qué está pasando aquí?
let mut z = 10;
change_value(&z);
println!("{}", z);
}
fn change_value(val: &i32) {
*val = 100; // ¡Error! ¿Por qué?
}
El compilador se queja de la línea *val = 100, dice algo sobre que val es una referencia inmutable. ¡Pero estoy usando el asterisco para desreferenciar! ¿Por qué no funciona?
También no entiendo por qué a veces es necesario escribir & antes de una variable al pasar