Goのポインタがよくわかってないから、まとめてみる
Goは勉強のコストが低いから、誰でもやりやすい言語と言われている.
それは重々承知しているし、実際に書いていて、わかりやすい言語ではあると思う.
しかし、曖昧なまま進んでいくと、ぶち当たるだろう ポインタ , これがマジでよくわからない. 元々 CS とか出てる人は Cとかやってるのかもしれないけど、文学部のワイにはマジでよくわからない.
さぁ学んでみよう!!
Goの型
Go自体は、みんなご存知の通り、静的型ありの言語 型の種類は、 int, string ...etc その中に ポインタ型というのがあり、その名の通り、ポインタを扱うための型である.
これは、変数宣言の時に、型名の前に " * " をつけることで定義できる. 変数に"&"をつけると変数の アドレス を参照することができ、アドレスから変数の値を参照するには" * "を変数につける。
package main import "fmt" func main() { var p *int var n int n = 10 p = &n fmt.Print(p) // 0xc000094010 fmt.Print(*p) // 10
変数 p は ポインタ型として定義されている. そこに int型の n( 10が代入されている ) のアドレスを代入.
出力しては、pのアドレスと代入された値の 10がでてくる
そこで1個疑問が出てきた
p と n のアドレスは同じなのか
package main import "fmt" func main() { var p *int var n int n = 10 p = &n fmt.Print(&p) // 0xc000094010 fmt.Print(&n) // 0xc00009a000
よくよく考えれば、p は 別で変数宣言してるわけだし、中身を n のアドレスで上書きしても、元々のアドレスが変わるわけではない.
一度知識として、アウトプットすれば、こんなもんかって感じ