Dev Study
Go コース

26. ポインタ — & と *、なぜ使うのか

ポインタは値そのものではなく、値が置かれているメモリ上の場所(アドレス)を指す値です。&x で変数 x のアドレスを取り出し、その型は *int(int へのポインタ)になります。逆に *p と書くと、ポインタ p の指す先の値を読み書きできます。この *p を通じた操作を「デリファレンス(参照外し)」と呼びます。

ポインタを使う一番の理由は、関数の中から呼び出し元の変数を書き換えたいときです。Go は引数を値渡しするため、関数に渡した変数のコピーを書き換えても元には反映されません。そこでアドレスを渡し、関数側で *p = 新しい値 と書くことで、元の変数を直接更新できます。大きな構造体を渡すときにコピーを避けて効率化する目的でもポインタが使われます。

C 言語と違い、Go のポインタには加算・減算などのポインタ演算がありません。できるのは取得(&)とデリファレンス(*)、そして nil との比較くらいで、安全に扱えるよう絞り込まれています。ポインタの初期値(ゼロ値)は nil で、nil をデリファレンスすると実行時パニックになる点だけ注意しましょう。

▶ サンプルコードを実行してみよう(自由に書き換えてOK)

Go
公式ドキュメントで詳しく ↗