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

プログラミング

ポインタについて整理する

ポインタとは

最も典型的なポインタの例としては、C言語におけるポインタが挙げられる。C言語のポインタは「特定のメモリ領域を指し示す」ものである。ポインタを経由してメモリ上のデータにアクセスする際、参照するデータの型に応じたポインタ型を用いる。たとえば、int型のデータにアクセスする場合は、int*型を用いる。これを「intへのポインタ」(pointer to int[1]) と呼ぶ。

出典: フリー百科事典『ウィキペディア(Wikipedia)』

https://ja.wikipedia.org/wiki/ポインタ_(プログラミング)

僕が大学1年の時に授業で履修して、一度プログラミングを嫌いになった概念です。とはいえ、冷静に考えればメモリ領域のことを指しているだけなのでそんな難しいことは言ってません。なので言うほど恐る必要はないと思います。

golangのポインタ型

*<変数>で「1」「hoge」といった値を参照することができます。<変数>だと「0x414020」 といったアドレスが参照されます。なのでポインタ型を通常の変数のように扱いたい場合は前に*をつける必要があります。そうでないとアドレスを指してしまうので。

&と*の使い方を解説

アンパサンド(&)について

&を使うと構造体をポインタ型に変換することができます。今回のコードだとpはポインタ変数で定義したので、ポインタ型しか代入することができない為、&をつけてポインタ型に変換しています。

アスタリスク(*)について

アドレスを渡されたTest内での引数aはポインタ型です。よって*をつけることでそのアドレスが指す変数を参照することができます。なので演算をすることが可能です。

アドレスモードと間接参照モード

アドレスモードとは

最初の型宣言の部分で*をつけると、この変数はアドレスしか持たない変数になります。この状態をアドレスモードと呼びます。「アドレスしか持たない変数」と覚えておけばOKでしょう。

間接参照モードとは

sampleに&をつけることでアドレスを指すので、pointerSampleは一旦sampleのアドレスを保持します。 *をつけることでモードチェンジが発生し、アドレスで指定された部分の値を指定することができるようになります。つまりポインタ型で宣言した変数も値を表示できるということです。このことを間接参照モードといいます。

ポインタを使うメリット

プログラムの高速・省メモリ化

ポインタを用いると、値渡し(毎度変数を新しく定義し、メモリ(アドレスを取得し、箱を指定)を消費)を行う必要が無くなります。なので処理が高速化します。CPUのスペックが低かった昔は必須のプログラミング手法でした。時代が進むにつれ、CPUの性能が向上し、ポインタの概念を持たないプログラミング言語が多数出現してきましたが、大規模開発をする上では省エネコーディングは必須であり、現在もなお使われています。

参考サイト

Go言語におけるポインタのアンパサンド(&)とアスタリスク(*)の違い - Qiita
## はじめに 最近業務でgo言語を触り始めそうな予感がしている今日この頃です。 それまでrubyやjavaしか触ってきておらず、ポインタを意識せずに人生を送ってきました。 なんとなくポインタに付いては理解できているのですが...
Go言語のポインタについて、自分流の認識の仕方 - Qiita
Go言語(Golang)を学んでいると避けることのできない要素であるポインタ。 僕はC言語を通ってこなかったエンジニアであるため、このポインタという考え方について最初はいまいちしっくり来ていませんでした。*とか&とか何なんだ状...

エンジニアにイチ押しアイテム

目の疲労回復グッズ

ディスプレイをずっと見続けた時の目の疲労感ってすごいですよね。血行が悪くなっているというかズーンて重い感じがして、ひどい時は気持ち悪くなったりした経験をもつ人も多いのではないのかと思います。目って今後生きて行く上で非常に大切なものですし、ちゃんとにケアしていきたいものです。そこで私が日常的に使っている目のマッサージアイテムを紹介します。

アイマッサージャー 二年間保証 最新グラフェン加熱技術 目元マッサージャー

私は寝る前必ず使用しています。15分間目を40°で保温&マッサージしてくれて、本当に極楽の時間です。その後は快眠で、翌日の朝の目の疲労度が全くなくなりました。Amazonのレビューがこの商品の良さを物語っています。

筆者
筆者
303件レビューがついてて、評価が4.7と購入した方の殆どが「非常に満足」しているコスパ最強!超オススメのアイテムです!

座椅子DIYで疲労防止

長い間椅子に座って作業することはエンジニア、理系学生にとってはつきものだと思います。ですが、この椅子の性能によって作業後の疲労感が全く異なるということを意識したことがありますか?私は以下の2つのアイテムを使って座椅子をゲーミングチェア並みにアップデートしました。おかげで姿勢が安定し、作業後の疲労感も減りました。また何より集中して作業に打ち込めるようになりました。

IKSTAR クッション 低反発 座布団 第五世代 オフィス IKSTAR クッション 低反発【メーカー直営・1年保証付】 ランバーサポート
筆者
筆者
座椅子にホールド感が出て、座り心地が格段に向上します。長時間座っていても疲れにくくなるので引きこもりにならないように注意しましょう!作業に夢中で1日中座りっぱなしだった経験があるので...

コードの可読性を高める

自分が大型ベンチャーの内定インターンに初めて参加した時、周りの超優秀なエンジニアの方々のコードをみて自分のコードの汚さに絶望しました。その時自分のマネージャーに勧められた本がリーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニックという超有名な一冊です。美しいコードを書くためのエッセンスが凝縮されています。エンジニアを職種として選ぶ方は読まない理由がない一冊です。自分もこの本を読んで、かなりコーディングスキルが向上したと感じています。

ネットワークの基礎を押さえる本

ITの基礎がおぼつかなくて、ネットワークの話についていけなかった時、早稲田大学のエンジニアの友人が勧めてくれたのがネットワークはなぜつながるのか 第2版 という本です。ハードウエアから、理論までネットワークの基礎が非常にわかりやすく解説されています。「TCP」「IP」「リゾルバ」という用語を説明できないエンジニアは間違いなく買ったほうがいいです。自分は知らなくてバカにされたので。笑

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