【Go言語】あそこの値は? – Pointers(ポインタ) –

2019年1月16日GoA Tour of Go,Go言語,pointer,ポインタGo,A Tour of Go,Go言語,pointer,ポインタ

年末年始を挟んでなんだかんだで一月くらい間があきましたが、久しぶりに「A Tour of Go」を進めてみます。

制御文は前回で終了しましたんで、今回から「More types: structs, slices, and maps」とか言う章に突入します。

今回進めるページ

えー、「Pointers」らしいです。

C言語を勉強している頃、理解するのに苦戦していた記憶が蘇ってくるお題です。(;´Д`)

今回進めるページ - Pointers
今回進めるページ – Pointers

今回覚えること

お題のページを読んだ感じだと、覚えるポイントはこんなところでしょうか。

  • ポインタとは
  • Goでのポインタの使い方

詳細に見ていきます。

ポインタとは

変数を指し示すものがポインタです。

ポインターとは
ポインターとは

もう少し具体的言うと、変数が配置されたアドレス値を指し示す値がポインタになります。

なぜポインタが必要?

Goは勉強中なので、C言語な観点になりますが、変数値を取り回す(ファンクション間でやり取りなど)ときに無駄なメモリ領域を使わないようにするためとなります。

例えば、ファンクション間で変数のやり取りをするとこうなります。

ファンクション間で変数を渡すと…
ファンクション間で変数を渡すと…

図にも書いてますが、値渡しは値のコピーとなるので、単純に倍のメモリ使用量となります。

ここでポインタを使うことでメモリの使用量を節約できたりするんですね。

ポインタを使うと…
ポインタを使うと…

ここで気をつけたいのが、ポインタを使うと参照になる点です。

ポインタを介して値を変更した場合、参照先変数の値が変更されます。

それについてはこのあと触れてみます。

Goでのポインタの使い方

Go言語上でのポインタの使い方です。

変数のポインタを渡すには

変数の前に ”&” を付けます。

ポインタを受け取るには

”*”付きの型で受け取ります。

ポインタが参照する変数を操作するには

ポインタを受け取った変数に”*”を付けます。

サンプルプログラム

実際にポインタを使ったサンプルプログラムを書いてみました。

先程触れた参照についてなんですが、プログラム中、*psuji に 3 を代入しています。

*psuji の参照先は suji なので、3 という数字は suji に代入されることになります。

出力値を見るとわかりますが、変数 suji が 3 になっているのが確認できます。

ファンクション間の値渡しなど、変数がコピー扱いされる場合、当然ですがコピー先を変更してもコピー元の変数は変更されません。

難しいことではないんですが、この違いは意識しないとだめですね。

今回のまとめ

というわけでポインタについてはこんなところです。

実際に使ってみないとなかなか動きがつかめないかもしれませんが、多分、C言語のポインタよりは簡単に使える気がしました!(๑•̀ㅂ•́)و

さてまとめですが…

  • ポインタは変数への参照なんです
  • 変数のポインタを渡す場合は”&”を付けるんです
  • ポインタを受け取る場合は”*”付きの型で受け取るんです
  • ポインタの参照先変数の値を操作する場合はポインタ用変数に”*”を付けるんです

次回は構造体の予定。٩(๑´3`๑)۶