有没有办法让两个 *mut 指针指向同一个内存地址?

Is there a way to get two *mut pointers pointing to the same memory address?

我正在尝试在 Rust 中实现双向链表以获得乐趣。

我遇到了所有权系统的问题,无法为两个指针设置别名。我意识到指针别名的好处,但这次我想破例。

我想知道是否有任何方法可以让两个 *mut A 指针指向同一个内存地址。

例如,现在我有这个:

self.first = unsafe { mem::transmute(new_node) };
// How do I set self.last to point at the same new_node?

我知道 RcRefCell 类型,但我想避免在数据结构中使用它们,因为它们有 运行 时间开销。

我不太清楚你的意思。 &mut 是执行别名的那个。 *mut 可以像其他任何东西一样复制,取消引用原始指针当然是 unsafe,但你应该能够这样做:

fn main() {
    let mut x: i32 = 5i32;
    let xptr: *mut i32 = &mut x as *mut i32;

    let xptr_copy: *mut i32 = xptr;

    unsafe {
        println!("xptr: {}", *xptr);
        println!("xptr_copy: {}", *xptr_copy);
    }
}

playpen

虽然我同意 dbaupp 的观点,即您应该提供更多上下文,因为这不是您应该做的,但这里是对您提出的确切问题的回答:

fn main() {
    let mut a: u32 = 42;
    let b: *mut u32 = &mut a;
    let c: *mut u32 = &mut a;
    println!("{:?}, {:?}", b, c);
}

现在你有两个 *mut u32 指针指向同一个内存地址。没有 unsafe!当然,如果你想 使用 指针,你现在必须做更多的思考来决定你是否已经完全打破了编译器期望的所有假设和保证! :-)