#[derive(Debug)] struct S1 { texte: String } #[derive(Debug)] struct S2<'a> { reference: &'a S1 } fn main() { let mut o1 = S1 { texte: "coucou ".to_string() }; let mut o2 = S2 { reference: &o1 }; let mut o3 = S2 { reference: &o1 }; let mut ref_o2: *mut S1 = o2.reference as *const S1 as *mut S1; unsafe { let mut texte: &mut String = &mut (*ref_o2).texte; texte.push_str("toi !"); println!("{:?}", &texte); } println!("(1) o2 = {:?}", o2); let mut ref_o2: *mut S1 = o2.reference as *const S1 as *mut S1; let ref_o2bis: &mut S1 = unsafe { &mut (*ref_o2) }; ref_o2bis.texte.push_str(" ça va ? "); println!("(2) o3 = {:?}", o3); }