《Go言語》ポインタにおけるアンパサンド(&) とアスタリスク(*)の違いを初心者が解説

Go

&(アンパサンド)

変数からポインタを抽出するための仕組み

&(アンパサンド)は変数からポインタを抽出するために用いられる仕組みのことを指します。以下のプログラムを見てください。

&をつけることで変数xが指すアドレスを参照することができます。元々int型で定義されていた変数に対して、&をつけると*int型になります。&ではなくて*(アスタリスク)をつけた時はどのような挙動になるのか試してみます。

*を使う場合はint型ではなくポインタ型でなくてはいけません。これは後ほど説明しますが、簡単にいうとアドレスが入る専用の型でないと*は使えないのです。ちなみに一番初めのプログラムを少し変更して以下のように書いてみます。

int64型は2の8乗、64ビット分のメモリを消費するのでちょうどxとyのアドレスも8ビット分空いていることがわかります。ちなみにアドレスといっていますが、その型が確保した先頭のアドレスのことを暗黙的にアドレスといいます。

*(アスタリスク)

ポインタが指すアドレスの値を参照する

まず大前提*はポインタ型に対して使えるものです。int型などには使えません。なので先程のプログラムではエラーが出ました。
*(アスタリスク)の役割を説明します。*をポインタ型に使うとポインタが指すアドレスの値を参照することができます。以下のプログラムを見てください。

insertValueの引数はポインタ型を引数として取ります。なので関数を呼び出して、引数を与える時は&を使ってアドレスを取得して、insertValueに渡しています。insertValueではvのアドレスが渡されており、関数内で直接vの値を書き換えることができます。関数内のhとvが指しているアドレスは同じなので、そのアドレスが指し示す箱の値を更新すれば双方の変数の値が変わるのは当然です。せっかくなので失敗パターンを見ていきます。insertValueの引数がポインタ型出なかった時、以下のエラーがでます。

ポインタ型でない型をinsertValueに渡すことができないのでエラーになってます。では次にinsertValueはポインタ型で指定されているが、渡された引数がポインタ型ではなかった場合のプログラムを見てみましょう。

こちらも同様、型が異なるのでエラーがでます。このような形で、ポインタを使うと関数内でもどこでもある変数の値を書き換えることが可能になります。これは余分にスコープが狭い変数を大量生成してしまうプログラムと比べるとメモリの消費量が相当少ないことが想像つきます。

番外:Goを学ぶ上で最高の一冊

プログラミング言語Go

ベル研究所に在籍していたカナダ出身の学者ブライアン・カーニハンさんが執筆した、書籍の日本語訳版です。このブライアン・カーニハンさんという方はC言語とUnixの開発に大きく貢献した方として非常に有名な学者です。その方が執筆したこの本は、アカデミックかつ簡潔な言葉でGo言語について徹底解説してくれます。Go言語をしっかり学びたい人には最高の一冊です。

番外:その他おすすめの記事

エンジニアがもっと楽しく仕事できるようにスキルアップの方法や役立つ情報を発信しています。興味がある方はご覧になってください。読者の皆様にとって損になるようなことはないと思います。使ってない方は是非使ってみてください!

おすすめアイテム①

自分はオフィス次の2点の座布団と背もたれクッションを利用してます。姿勢が安定し、お尻への負担が激減します。オフィスにいるのに自宅で作業しているような感覚になるので気に入ってます。また疲労感もかなり減るので費用対効果が非常に高いアイテムだと思ってます!

おすすめアイテム②

ブックスタンドみなさん使ってますか?PCを打ちながら参考書見る時に手で抑える必要がなくなるので非常に便利です。自分も購入した時なんでいままで使ってなかたんだろうと後悔したのでまだ持ってない方は買っておくと作業効率があがりますよ!

エンジニアの基礎知識・教養

別の記事でエンジニアとして知っておくべき技術本についてまとめました。スキルの高いエンジニアは極々当たり前にしっている知識だとおもいますが、そうでない方、エンジニアのスキルに不安があるかたに是非読んで欲しい技術本をまとめました。そのなかで例を1つあげるならば「リーダブルコード」などが挙げられます。優秀なエンジニアの先輩でこの本を読んでいない方はほぼいないと思います。エンジニアのスキルを上げるために、ある程度読むべき本というものが決まっているのできちんと読んで勉強しましょう。

時短アイテム!日々の生活の質を上げる

日常生活における無駄を省く表品をまとめました。1日無駄な作業時間が10分発生するとしたら1年間で3600時間もその無駄な作業に時間を費やすことになります。このような魔の作業を消し去ってくれる商品をまとめました。全て自分が使ってお勧めできる商品のみ紹介してます。

気軽にお声かけください

このような形でほぼ毎日、情報発信を行ってます。技術的な部分で誤っている点などもあるかもしれません。その様な部分を発見した方はTwitterのDMなどで知らせていただければ凄い嬉しいです。また自身自身のエンジニアのネットワークを広げたいと思ってます。日頃六本木や渋谷にいることが多いですので気軽にお誘いください。情報交換しましょう。

筆者
筆者

今回の記事の内容は以上で終了です。最後まで読んでくれてありがとうございました。Twitterもやってるのでフォローしてくれたら嬉しいです!

タイトルとURLをコピーしました