这段代码:

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;

两者有什么区别?

最佳答案



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



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

unsafe { *b = 11; }

也可以看看:
  • Understanding Pointer Types in Rust
  • References and Borrowing
  • Unsafe Rust
  • 关于pointers - 分配* mut T和&mut T有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47874621/

    10-11 22:13