2017-11-14 11 views

答えて

0

UnsafeMutablePointer構造体であるが、それは「セットをnonmutating」ここ

public struct UnsafeMutablePointer<Pointee> : Strideable, Hashable { 

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

} 

を宣言プロパティを設定すると、ポインタ変数自体の 状態を変異させないことを意味します。

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


ptrは一定であるので、あなたはそれに新しいUnsafeMutablePointerを割り当てることはできませんが、それは内の保持構造を変更することができます。要するに、letエンティティに何かを再割り当てすることはできませんが、そのプロパティにアクセスして変更することができます。

1

ポインターの場合は、指しているメモリーアドレスを変更することはできませんが、そのメモリーアドレスに保管されているデータを変更することはできます。 ポインタはメモリアドレスへの参照を格納するだけなので、そのアドレスが一定である限り、Pointerはその値を変更しませんでした。

2

ポインタは構造体ではありません。

値型の構造体とは異なり、参照型です。

ポインタを変更可能と宣言しているので、pointee(メモリの内容)は変更できますが、参照自体は変更できません。

+1

DávidPá[email protected]ポインタが**危険**変更可能な*として宣言されていますのでptr.pointeeptr が一定で、かつ同じ添字セッターのための真である場合でも、新しい値を割り当てることができます

ポインタ* – vadian

+0

私の悪い、私はあなたが可変/不変、ポインタ自体の型ではない宣言を意味すると思った。 –

+0

'struct UnsafeMutablePointer'は構造体です。 –

関連する問題