【问题标题】:What's the difference between assigning to a *mut T and a &mut T?分配给 *mut T 和 &mut T 有什么区别?
【发布时间】:2017-12-18 18:47:30
【问题描述】:

这段代码:

let mut a2 = 99;
let b: *mut i32 = &mut a2;
*b = 11; // does not compile , even after unsafe {*b}

产生错误:

error[E0133]: dereference of raw pointer requires unsafe function or block
 --> src/main.rs:4:5
  |
4 |     *b = 11;
  |     ^^^^^^^ dereference of raw pointer

但是这段代码有效:

let mut a2 = 99
let b = &mut a2;
*b = 11;

两者有什么区别?

【问题讨论】:

标签: pointers rust


【解决方案1】:

两者有什么区别?

一个是原始指针 (*mut _),另一个是引用 (&mut _)。正如书中所说:

编译器保证引用永远不会悬空

此外,引用永远不会是NULL。取消引用引用总是安全的。取消引用原始指针并不总是安全的,因为编译器不能保证其中任何一个。因此,您需要一个unsafe 块:

unsafe { *b = 11; }

另见:

【讨论】:

    猜你喜欢
    • 2019-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 2012-03-10
    • 1970-01-01
    相关资源
    最近更新 更多