fn main() { let mut num = 5; let r1 = &num as *const i32; let r2 = &mut num as *mut i32; let address = 0x012345usize; let r = address as *const i32; unsafe { println!("{}", *r1); println!("{}", *r2); } unsafe { dangerous(); } unsafe { println!("c call: {}", abs(-3)); } unsafe { HELLO_WORLD = "test"; println!("{}", HELLO_WORLD); } println!("{}", HI_THERE); add_to_count(3); unsafe { println!("counter: {}", COUNTER); } } unsafe fn dangerous() {} extern "C" { fn abs(input: i32) -> i32; } static mut HELLO_WORLD: &str = "hello world"; static mut COUNTER: u32 = 0; fn add_to_count(inc: u32) { unsafe { COUNTER += inc; } } const HI_THERE: &str = "hi there"; unsafe trait Foo { // methods } unsafe impl Foo for i32 { // implementations }