我曾尝试使用原始指针强制转换my_struct as *const usize,但这会导致non-scalar cast错误.找到基元的地址时,原始指针似乎工作正常,但不是自定义structs.
看std::ptr::addr_of宏。当由于内存对齐问题而无法获取参考(如已接受的答案中所建议的)时,这尤其有用。
这是文档中给出的示例std::ptr::addr_of:
use std::ptr;
#[repr(packed)]
struct Packed {
f1: u8,
f2: u16,
}
let packed = Packed { f1: 1, f2: 2 };
// `&packed.f2` would create an unaligned reference, and thus be Undefined Behavior!
let raw_f2 = ptr::addr_of!(packed.f2);
assert_eq!(unsafe { raw_f2.read_unaligned() }, 2);
Run Code Online (Sandbox Code Playgroud)