Goを使用するにあたり、ポインタとアドレスでつまづいたので覚書
Goでは値が初期化(定義)されると、値の内容の他にその値がメモリ上のどこにあるかを示すアドレスというパラメータが自動生成される。
アドレスの仕組み
アドレスを確認する場合
&value
というように、「&+値名」のように書くと、その値のアドレスを参照できる。
func main() {
a := 5
b := &a
fmt.Println(a)
fmt.Println(&a)
fmt.Println(b)
fmt.Println(&b)
}
5
0xc00001a060
0xc00001a060
0xc00000e028
これは何が起こっているのかというと、aにbのアドレスを代入したので、fmt.Println(b)の戻り値はfmt.Println(&a)の戻り値となる。
また、bは新しく定義されたので、bには値としてaのアドレスがセットされたと同時に、bにはアドレスが割り振られた。
アドレスに値があれば、アドレスから値を参照することができる
(例1)では、bにはaのアドレスを代入したが、その前にaには値が定義されているので、bからaにセットされている値を参照することができる。
アドレスに値がセットされている場合、
*value
のように、「* + 値名」で参照することができる。
func main() {
a := 5
b := &a
fmt.Println(*b)
}
5
アドレスの中の値を変えることもできる。
func main() {
a := 5
b := &a
*b = 8
fmt.Println(a)
fmt.Println(*b)
}
8
8
bにaのアドレスを代入したのちに、bに割り振られているアドレスにセットされている値(5)を8にしたので、また、bとaはアドレスが同じなので、自動的にaの値も変わる。
Author And Source
この問題について(Goを使用するにあたり、ポインタとアドレスでつまづいたので覚書), 我々は、より多くの情報をここで見つけました https://qiita.com/RikiLog/items/5d9322e5fb005c8477fd著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .