gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:22:20 26 4
gpt4 key购买 nike

这段代码:

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;

两者有什么区别?

最佳答案

What is the difference between the two?

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

the compiler guarantees that references will never be dangling

此外,引用永远不会是NULL。取消引用引用总是安全的。取消引用原始指针并不总是安全的,因为编译器不能保证其中任何一个。因此,您需要一个 unsafe block :

unsafe { *b = 11; }

另见:

关于pointers - 分配给 *mut T 和 &mut T 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47874621/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com