2017-12-18 1 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; } 

도 참조 :

관련 문제