2017-12-18 8 views
-1

このコード:* mut Tと&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; 

二つの違いは何ですか?

+0

'} {'安全ではないと間違って何したがって、あなたはunsafeブロックが必要ですか?多分あなたは間違った場所に置いたでしょうか? https://play.rust-lang.org/?gist=388da28b6bfac187a3c0ec12e1798246&version=stable – loganfsmyth

答えて

5

What is the difference between the two?

一つは、生ポインタ*mut _)であり、他方は、参照&mut _)です。この本の内容:

the compiler guarantees that references will never be dangling

また、参照は決してNULLではありません。参照を逆参照することは常に安全です。コンパイラがそれらのいずれかを保証することはできないので、生ポインタを逆参照することは必ずしも安全ではありません。

unsafe { *b = 11; } 

も参照してください:

関連する問題