首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分配给*mut T和a &mut T有什么区别?

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

Stack Overflow用户
提问于 2017-12-18 18:47:30
回答 1查看 99关注 0票数 0

此代码:

代码语言:javascript
复制
let mut a2 = 99;
let b: *mut i32 = &mut a2;
*b = 11; // does not compile , even after unsafe {*b}

生成错误:

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

但是这个代码是有效的:

代码语言:javascript
复制
let mut a2 = 99
let b = &mut a2;
*b = 11;

这两者有什么区别呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-18 19:28:22

这两者有什么区别呢?

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

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

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

代码语言:javascript
复制
unsafe { *b = 11; }

另请参阅:

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47874621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档