ポインタ変数の最初のほうのところをまとめる

pointer-e プログラミング

※当ブログでは商品・サービスのリンク先にプロモーションを含みます。ご了承ください。

C++を触っていると、出てくるのがポインタ変数なんですが、毎回ちょくちょく忘れてしまいます。

あれ、*ってつけるんだっけ・・・

あれ、この場合って&

で、結局エディタのauto correct機能に頼るんですよね。そろそろ抜け出したい。

なので、書き残しておきます。

最低限これは理解しておきたいのに、いつも忘れてしまうんです。。どっちだっけかな、って。

参考にしたサイト様

C++ポインタまとめ - Qiita
アドレス・変数の値はコンピュータのメモリに保存される。・アドレスは値が格納されているメモリの位置を表す。変数のアドレスの取得・変数からは 1.アドレス(address) と 2.実体、値(c…

ポインタ変数とは

変数を宣言すると、メモリ上にそれを格納するだけのスペースを確保します。

このときのそのスペースの住所をメモリアドレスといいます。

このメモリアドレスを保持してくれるのがポインタ変数になります。

なんでポインタ変数が必要なのか?

なんだかややこしいものがでてきたな・・といった感じで、あまり必要性がしっくりきていないのですが。

調べてみると以下の記述が。

・ ポインタ変数を使うことは、メモリのアドレスを使って別のデータにアクセスする方法の一つ

https://qiita.com/yokoto/items/5672ff20b63815728d90#%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%E5%A4%89%E6%95%B0

たしかに、配列は連続した位置に格納されるので、アドレスさえわかれば、配列データを好きにアクセスすることができます。

・ポインタ(変数)の操作は、単なる値の操作よりも、低レベルな操作。

https://qiita.com/yokoto/items/5672ff20b63815728d90#%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%E5%A4%89%E6%95%B0

これはまさしくその通りで、だから、わかりづらいんですよね。概念が。

ポインタ変数の書き方

int *pointer;

*を変数名の左に書きます。これがポインタ変数です。

int型の値のメモリアドレスを格納する、という意味です。

int num = 123;
int *pointer;
pointer = &num

ポインタ変数に、int型変数numのメモリアドレスを格納します。

&をつけることで、その変数のメモリアドレスが取得できます。

int num = 123;
int *pointer;
pointer = &num

cout << num << endl; // 123
cout << &num << endl; // 0x1088a03c8 (numのメモリアドレス)
cout << pointer << endl; // 0x1088a03c8 (numのメモリアドレス)

出力は、このような感じになります。ポインタ変数はアドレスを保持する変数なので、アドレスを出力します。

間接参照とは

では、ポインタ変数が保持するアドレスに格納されている値にアクセスするにはどうすればいいのか?

間接参照を使います。

こちらの概念が入ってくるので、ポインタ変数って複雑になるんですよね。。。

int num = 123;
int *pointer;
pointer = &num

cout << *pointer << endl; // 123

間接参照では、またもや*を使います。宣言時に使う*は、ポインタ変数を宣言する時に使うもので、

それ以外に使う*は、間接参照の意味をもちます。

そのため、ポインタ変数に格納されてる値が取得できています!

しかも、間接参照を使うと値の書き換えもできてしまいます。

int num = 123;
int *pointer;
pointer = &num

cout << *pointer << endl; // 123

*pointer = 456;

cout << *pointer << endl // 456
cout << num << endl // 456

注意しなくてはいけないのは、値を書き換えした場合、元々の変数(num)の値も書き変わるということです。

まあ、当たり前ですよね、同じメモリアドレスなんですから。

まとめ

ひとまずポインタ変数の長くて深い概念のうち、第一歩をまとめてみました。

まだ奥が深い・・深すぎる・・ので小分けにしてまとめていきたいと思います。

にほんブログ村に参加しております!よろしければクリックお願いします 🙂

にほんブログ村 IT技術ブログへ
にほんブログ村

コメント

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