用 &raw 创建裸指针

版本新特性 / Rust 1.82

#[repr(packed)]
struct Packed {
    flag: u8,
    value: u32,
}

// *** before: ***
// the pointer came from a macro, while the plain form created
// a reference in between, and undefined behaviour along with it
let p = std::ptr::addr_of!(packed.value);

// *** in version 1.82: ***
// the same thing became part of the language
let p = &raw const packed.value;
let q = &raw mut packed.value;
println!("{}", unsafe { p.read_unaligned() });