【Go】ポインター

2024/01/13に公開

ポインターの理解を深めるために。

str := "test"
pointer := &str

fmt.Println(str) // test
fmt.Println(pointer) // 0xc00002a070
fmt.Println(*pointer) // test

&(アンパサンド)を使用することで、その変数が格納されているメモリの値をゲットする。
*(アスタリスク)を使用することで、ポインターが指し示すメモリに格納されている値をゲットする。

*pointer = "hello"

fmt.Println(str) // hello
fmt.Println(pointer) // 0xc00002a070

上記のように、ポインターに*(アスタリスク)を付与すると、そのメモリに格納されている値を変更することができる。

str2 := str

fmt.Println(&str) // 0xc00002a070
fmt.Println(&str2) // 0xc00002a0b0

strの値を違う変数に渡すときに、そのまま渡すと、新しいメモリにstr内の値を格納するので、メモリが無駄に消費される。
ポインターを使用すると、strの場所を指し示す分だけメモリを使用するので、お得?

Discussion