Skip to content
Snippets Groups Projects
Unverified Commit e033e6df authored by Vanille-N's avatar Vanille-N
Browse files

ajout: references

parent 8b897417
No related branches found
No related tags found
1 merge request!1Master
......@@ -389,16 +389,58 @@ fn main() {
}
\end{lstlisting}
\vspace{.5cm}
Pour forcer le passage vers le tas, la structure de donnée \texttt{Box} doit être utilisée.
\section{Références}
Les références remplacent la plupart du temps la notion de pointeur.
En plus de pointer vers une donnée parfois modifiable, elles évitent des copies
inutiles et peuvent garantir qu'il n'y a pas plusieurs personnes qui ont un droit
d'écriture en même temps.
\begin{lstlisting}[style=Rust, language=Rust]
fn main() {
// Box de \textbf{i32}
let a: Box<i32> = Box::new(5);
let dix: usize = 10;
let dix_ref: &usize = &dix; // dix\_ref pointe vers dix
println("{}", *dix_ref); // 10
let mut un: usize = 0; // un est modifiable
{
let un_mut_ref: &mut usize = &mut un; // référence avec droit d'écriture sur un
// un ne peut pas être lu ni écrit pendant
// que un\_mut\_ref existe
*un_mut_ref = 1; // modifie la valeur de un
// un += 1; // erreur
// let x = un; // erreur
} // un\_mut\_ref cesse d'exister, on peut de nouveau lire et écrire dans un
{
let un_ref: &usize = &un; // référence avec droit de lecture seulement
// un peut être lu mais pas écrit pendant que
// un\_ref existe
// un += 1; // erreur
// let x = un; // ok
} // un\_ref cesse d'exister, on peut de nouveau écrire dans un
// Les références sont surtout utiles pour appeler des fonctions
let mut x: usize = 1;
incrementer(&mut x); // permet de donner un droit d'écriture sur une variable locale
println!("La nouvelle valeur de x est {}", x); // 2
let v: Vec<usize> = vec![1, 2, 3, 4, 5];
let s = somme(&v); // droit de lecture uniquement, permet de ne pas avoir à copier v
println!("La somme de {:#?} est {}", s); // 15
// On a la garantie que v a toujours exactement le même contenu qu'avant l'appel à la fonction
}
fn incrementer(ptr: &mut usize) {
*ptr += 1;
}
println!("a = {}", a); // "a = 5"
fn somme(vect: &Vec<usize>) -> usize {
vect.iter().sum()
}
\end{lstlisting}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment