分配给* mut T和&mut T之间的区别是什么?

问题描述 投票:0回答:1

这段代码:

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个回答
6
投票

两者有什么区别?

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

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

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

unsafe { *b = 11; }

也可以看看:

© www.soinside.com 2019 - 2024. All rights reserved.