Que signifient les symboles esperluette (&) et astérisque (*) en Rust ?
Bonjour à tous ! Je viens de commencer à apprendre Rust et je n'arrive pas à comprendre deux opérateurs : & (esperluette) et * (astérisque). Dans d'autres langages, comme le C++, j'ai l'habitude que & soit la prise d'adresse et * le déréférencement de pointeur. Mais en Rust, c'est un peu différent.
Par exemple, j'ai écrit un programme simple qui essaie de modifier la valeur d'une variable via une fonction :
fn main() {
let x = 42;
let y = &x;
println!("{}", y); // Ça marche, mais que se passe-t-il ici ?
let mut z = 10;
change_value(&z);
println!("{}", z);
}
fn change_value(val: &i32) {
*val = 100; // Erreur ! Pourquoi ?
}
Le compilateur râle sur la ligne *val = 100, disant quelque chose à propos du fait que val est une référence immuable. Mais j'utilise l'astérisque pour déréférencer ! Pourquoi cela ne fonctionne-t-il pas ?
Je ne comprends pas non plus pourquoi il faut parfois écrire & devant une variable lors de l'appel de fonction.
No answers yet.
Connectez-vous pour laisser une réponse