[Golang]ポインタの挙動の確認

ポインタの挙動の確認。

ポイントは2つ

  • ポインタはアドレスを持つ
  • デリファレンスして実体を操作する

サンプル

func main() {
    var p *int // int型のポインタの宣言

    fmt.Println(p) // == nil

    v := 2
    fmt.Println(&v) // vのアドレス

    p = &v
    fmt.Println(p) // vのアドレスと同じ

    // *をつけるとデリファレンス(ポインタ型を通してデータ本体を参照すること)できる
    fmt.Println(*p) // == 2

    // pを通してvの値を更新
    *p = 5
    fmt.Println(v) // == 5

    // 関数を使ったポインタの挙動確認
    i := 1

    // 関数の引数は値コピーなので呼び出し元には関係ない
    inc(i)
    inc(i)
    fmt.Println(i) // == 1

    // ポインタを使って変更する
    inc_p(&i)
    inc_p(&i)
    inc_p(&i)
    fmt.Println(i) // == 4

}

func inc(i int) {
    i++
}

func inc_p(i *int) {
    *i++
}

ソースはこちら

iti