有没有办法在Rust中获取`struct`的地址?

Epi*_*ato 5 struct rust

我曾尝试使用原始指针强制转换my_struct as *const usize,但这会导致non-scalar cast错误.找到基元的地址时,原始指针似乎工作正常,但不是自定义structs.

Fra*_*gné 14

您需要使用&运算符来获取任何变量的地址,因此您需要编写&my_struct as *const _(_可以是文字_,也可以是指针后面的值的类型).


Jas*_*sha 7

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)