繁体   English   中英

分配* mut T和&mut T有什么区别?

[英]What's the difference between assigning to a *mut T and a &mut T?

这段代码:

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; }

也可以看看:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM