#【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)
}