我对以下问题感到相当困惑。如果我理解正确,
按预期,这会打印
程序在打印出“Deref”后终止。显然,当对“px”进行解引用时出现了问题。我猜测我的第一个关于“let x = &42”被内部扩展的评估是错误的。
let x = &42;
被内部扩展为
let x_value = 42;
let x = &x;
我记得在Rust书中看到过这个内容,但是我找不到相关的引用。
我的问题与以下代码有关:
let x = 42;
let rx = &x;
let px = rx as *const i32 as *mut i32;
unsafe {
*px = 0;
}
println!("{}", x);
按预期,这会打印
0
。然而,如果我写成:let rx = &42;
let px = rx as *const i32 as *mut i32;
unsafe {
println!("Deref");
*px = 0;
}
println!("{}", x);
程序在打印出“Deref”后终止。显然,当对“px”进行解引用时出现了问题。我猜测我的第一个关于“let x = &42”被内部扩展的评估是错误的。
UnsafeCell<T>
的实现并想要尝试使用原始指针。我忽略了一个重要的部分,即#[lang = "unsafe_cell"]
属性。谢谢。 - jan