【Go初心者】ポインタにおけるアンパサンド(&) とアスタリスク(*)の違いを徹底解説!

プログラミング

ポインタの使い方をざっくり見てみる

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

 

&は変数からポインタを抽出するのに用いられます。変数のポインタを取れてる証拠はこの出力をみればわかります。

 

&{1 2}

 

↑ &(アンパサンド)がついていればこれはポインタですね。

ちなみに:=は関数内のみ使用可能はvar宣言の省略記号です。

 

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

 

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

以下のコードなんかはaのアドレスが指す箱に値を格納

*a += 1

はaの変数に対応する箱の中の値に1を足しています。

 

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

 

アドレスモードとは

 

最初の型宣言の部分で*をつけると、この変数はアドレスしか持たない変数になります。この状態はアドレスモードと呼ばれます。アドレスモードって聞いたことあったけど、このアドレスしか持たない変数のことを言うんですね。

 

 

間接参照モードとは

 

sampleに&をつけることでアドレスを指すので、pointerSampleは一旦sampleのアドレスを保持します。

次が大切! *をつけることでモードチェンジが発生し、アドレスで指定された部分の値を指定することができるようになります。つまりポインタ型で宣言した変数も値を表示できるということです。

 

ポインタを使うメリット

コピー処理の高速化

値渡しを実行するとき、毎度変数を新しく定義し、メモリ(アドレスを取得し、箱を指定)食う必要が無くなります。なので処理が高速化します。

 

 

使用した参考書

プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)

 

参考にさせていただいた記事

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

 

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