2017-11-14 23 views

답변

0

UnsafeMutablePointer는 구조체이지만 여기

public struct UnsafeMutablePointer<Pointee> : Strideable, Hashable { 

    public var pointee: Pointee { get nonmutating set } 
    public subscript(i: Int) -> Pointee { get nonmutating set } 

} 

선언 "세트 nonmutating"를 속성을 설정하는 포인터 변수 자체의 상태를 돌연변이되지 않는다는 것을 의미한다.

따라서 ptr.pointee가 새 값을 할당 할 수 있습니다 경우에도 ptr 는 상수이고, 동일한 첨자 세터 마찬가지입니다 : 포인터가 * 안전하지 않은 ** 변경 가능한로 선언 DávidPásztor @

let ptr = UnsafeMutablePointer<Int>.allocate(capacity:1) 
ptr.pointee = 1 
ptr[0] = 2 
2


, ptr는 일정, 그래서 당신은 해 새로운 UnsafeMutablePointer을 할당 할 수 없습니다, 그러나 내 보유하고있는 구조를 수정할 수 있습니다. 즉, let 엔티티에 아무 것도 할당 할 수 없지만 속성에 액세스하고 수정할 수 있습니다.

1

포인터의 경우 포인터가 가리키는 메모리 주소를 변경할 수는 없지만 해당 메모리 주소에 저장된 데이터는 변경할 수 있습니다. 포인터는 메모리 주소에 대한 참조 만 저장하므로 해당 주소가 일정하면 포인터가 값을 변경하지 않습니다.

2

포인터가 구조체가 아닙니다.

값 유형 인 구조체와 달리 참조 유형입니다.

포인터를 변경할 수 있다고 선언 했으므로 pointee (메모리 내용)을 변경할 수는 있지만 참조 자체는 변경할 수 없습니다.

+1

** 포인터가 * – vadian

+0

내 나쁜, 당신이 선언/가변 변경할 수없는 포인터를 자체의 유형을 의미하는 줄 알았는데. –

+0

'struct UnsafeMutablePointer'는 구조체입니다. –