0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?