最近Go言語でもポインタを使用していることがわかったので応用できるかはわからないが
以前使用していたC言語でのポインタについてまとめてみる。
そもそもポインタとは
変数のメモリアドレスを格納している変数のことです。
変数や関数はメモリ上に格納されており、その場所がどこなのかを示す情報を持っている変数がポインタ変数となります。
○ 例:変数宣言をした場合のアドレスと値の関係
/* 変数宣言 */
int A;
/* ポインタ変数の宣言 */
int* pA;
/* 変数に値を代入 */
A = 10;
/* ポインタにAのアドレスを格納 */
pA = &A;
上記の内容だと以下のような形で値がメモリ上に格納されています。
上記図の場合は変数に値を格納した段階で0xXXXX4~0xXXXX7
に'10'が格納されています(ここで複数のアドレスが確保されていることについては後続で解説します)
例ではポインタ変数'''pA'''に'''A'''のアドレスを代入していますので'''pA'''には0xXXXX4
が入ります
※ちなみに4アドレス分確保されているのはint型のサイズが4byteのためです
変数の型サイズについてはポインタを覚える上では必ず通る道ですので後続の記事(注意点編)にて詳しく説明していきます。
ポインタの基本的な使い方
ポインタを使用することでメモリの番地を確認することができ、また番地先の値の操作を行うことができます。
○ポインタの各操作方法
/* 変数のアドレスを取得 */
/* &を変数の先頭につけると対象変数のアドレスを取得することができます */
/* 以下の場合だとポインタ変数pAにアドレスを代入 */
pA = &A;
/* ポインタ先(アドレス先)にアクセスする */
/* *を変数の先頭につけると変数に格納されたアドレス先にアクセスすることができます */
/* 以下の場合だとポインタ変数pAに格納されたアドレス先の値を20に書き換えています */
*pA = 20;
上記を図にすると以下のような形です
ここまでがポインタの基本となります。
ここからさらにポインタの注意点や応用編など記事として続けていければと思っています。