虽然Rust中的原始指针有offset方法,但这只会增加指针的大小.如何以字节为单位访问指针?
C中的这样的事情:
var_offset = (typeof(var))((char *)(var) + offset);
Run Code Online (Sandbox Code Playgroud)
从答案我链接到你以前的问题:
macro_rules! offset_of {
($ty:ty, $field:ident) => {
unsafe { &(*(0 as *const $ty)).$field as *const _ as usize }
}
}
fn main() {
let p: *const Baz = 0x1248 as *const _;
let p2: *const Foo = ((p as usize) - offset_of!(Foo, memberB)) as *const _;
println!("{:p}", p2);
}
Run Code Online (Sandbox Code Playgroud)
我们可以在计算中p2看到指针可以无痛地转换为整数(usize此处),在该整数上执行算术,然后将结果转换回指针.
isize并且usize是通用字节大小的指针类型:)