Pointers 什么';分配给a*mut T和a&;之间的区别是什么;莫特?

Pointers 什么';分配给a*mut T和a&;之间的区别是什么;莫特?,pointers,rust,Pointers,Rust,此代码: let mut a2 = 99; let b: *mut i32 = &mut a2; *b = 11; // does not compile , even after unsafe {*b} 生成错误: 错误[E0133]:取消对原始指针的引用需要不安全的函数或块 -->src/main.rs:4:5 | 4 |*b=11; |^^^^^^^取消对原始指针的引用 但这个代码是有效的: let mut a2 = 99 let b = &mut a2; *b = 1

此代码:

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

错误[E0133]:取消对原始指针的引用需要不安全的函数或块
-->src/main.rs:4:5
|
4 |*b=11;
|^^^^^^^取消对原始指针的引用
但这个代码是有效的:

let mut a2 = 99
let b = &mut a2;
*b = 11;
这两者的区别是什么

这两者的区别是什么

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

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

此外,引用永远不会为
NULL
。取消引用总是安全的。取消对原始指针的引用并不总是安全的,因为编译器无法保证这两种情况。因此,您需要一个
不安全的
块:

unsafe { *b = 11; }
另见:

这两者的区别是什么

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

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

此外,引用永远不会为
NULL
。取消引用总是安全的。取消对原始指针的引用并不总是安全的,因为编译器无法保证这两种情况。因此,您需要一个
不安全的
块:

unsafe { *b = 11; }
另见:


不安全{}
有什么问题?也许你放错地方了?
不安全{}
有什么问题?也许你放错地方了?