rust / intermediate
Snippet
Dereferenzierung von Raw Pointers in Unsafe Rust
Raw Pointers (*const T und *mut T) ermöglichen es, die Ownership- und Borrowing-Regeln von Rust zu umgehen. Das Dereferenzieren gilt als unsicher, da der Compiler nicht garantieren kann, dass der Pointer gültig ist oder die Speichersicherheit nicht verletzt.
snippet.rs
1
2
3
4
5
6
7
8
9
let mut num = 5;let r1 = &num as *const i32;let r2 = &mut num as *mut i32;unsafe {println!("r1 is: {}", *r1);*r2 = 10;println!("num is now: {}", num);}
Erklärung
1
let r1 = &num as *const i32;
Erstellt einen unveränderlichen Raw Pointer aus einer Referenz.
2
unsafe { ... }
Block, der für Operationen erforderlich ist, die der Compiler nicht als sicher verifizieren kann.
3
*r1
Dereferenzierung des Raw Pointers, um auf den Wert zuzugreifen, auf den er zeigt.