Avatar ·

¿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

No answers yet.

Inicia sesión para dejar una respuesta

Blogs