LoginSignup
0
0

More than 3 years have passed since last update.

【Golang】ポインタ

Posted at

【Golang】ポインタ

Golangの基礎学習〜Webアプリケーション作成までの学習を終えたので、復習を兼ねてまとめていく。 基礎〜応用まで。

package main
//ポインタ
//& アドレス
//*  アドレスの実態
//*int ポインタ型 この中にはアドレスを入れる
//関数で変数の値を変えたい場合は、関数の引数はポインタ型(メモリーのアドレス)を受け取るようにする。

import (
    "fmt"
)


func double(i int){
    i = i * 2
}

//ポインタ型を引数
func double2(i *int){
    *i = *i * 2
}

func main() {
    var n int = 100

    fmt.Println(n)
    //>>100

    fmt.Println(&n)
    //メモリのアドレスを表示
    //>>0xc000136008

    //2倍にする関数
    double(n)
    fmt.Println(n)
    //値渡しされる為、変わらない
    //>>100


    //ポインタ型
    //メモリーのアドレスの事
    //nのアドレスをpに定義(nを参照している)
    //&を使って任意の型から、そのポインタ型を生成できる。
    //&はアドレス演算子と呼ばれる。
    var p *int = &n

    //アドレスのアドレス?
    fmt.Println(&p)

    //メモリーを表示
    fmt.Println(p)
    //>>0xc000136008

    //メモリーの中身を表示
    fmt.Println(*p)
    //>>100

    //ポインタ型を引数に受けとるので、アドレスを渡す
    //double2(n)はnがポインタ型でないので、エラー
    double2(&n)
    //デリファレンス
    //参照渡しになるので変化する。
    fmt.Println(n)
    //>>200

    //nの参照のpなので400になる。
    double2(p)
    fmt.Println(*p)
    //>>400

    //こんなこともできる
    //nのアドレス
    fmt.Println(&n)
    //nのアドレスの実態
    fmt.Println(*&n)
    //nのアドレスの実態のアドレス
    fmt.Println(&*&n)



}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0