今回のテーマは、C言語のポインタについてです。
ポインタとは何か、ポインタ変数とは何かについて基礎を理解できるようにしていきましょう。
【ポインタとは】
C言語におけるポインタとは、変数のアドレスのことです。
ポインタを理解するために、まずは変数、アドレスとは何かについて詳しく見ていきましょう。
変数とは、プログラムで使うデータの一時的な保管場所です。
プログラム上で扱う値は、パソコンの「メモリ」という場所に置かれます。
メモリはこのように1Bごとに「~番地」というように場所を表す番号が振られています。
※メモリの番地は例
変数をプログラム上で使うためには「データ型」と、「変数につける名前」を決めて変数宣言をする必要があります。
データ型とは、変数の中身がどんな種類のデータなのかを表すものです。データ型それぞれで、int型なら4B、char型なら1Bなど、メモリのどのくらいの容量を確保するのかが決まっています。
変数名は、確保した領域につける名前です。変数名を付けることでメモリ上に置いたデータを、後から呼び出せるようになります。
int number=250;
char moji=’a’;
このようにコード上で変数宣言をしたとき、メモリの任意の場所が確保され、そこにデータが置かれます。具体的にメモリの何番地にデータが置かれるのかはOSが決めるのでプログラマーは指定しません。
では、ここから本題のポインタとは何かの話に入っていきましょう。
ポインタとは、「変数のアドレス」のことです。つまり、データがメモリ上の何番地に置かれているのか、という情報です。
プログラム上で変数のポインタ、つまりデータがメモリ上の何番地に置かれているかを知りたいときは、変数名の前に「&」の記号をつけて、
&number
&moji
と表します。
イメージとしては下記の図のようになっています。
※メモリの番地は例
【ポインタ変数とは】
次に、ポインタ変数とは何かについて見ていきましょう。
ポインタ変数とは、名前の通り、「ポインタを管理するための変数」です。
つまり、上記の&numberや&mojiなどのポインタ情報を、新しく領域を確保してメモリ上に置きたいときに用意するのがポインタ変数です。
プログラム上でポインタ変数を用意したいときは、通常の変数と同じく、「データ型」と「変数につける名前」を決める必要があります。
ポインタ変数の場合、データ型はint型の変数のポインタを管理したいのであればint*型、char型の変数のポインタを管理したいのであればchar*というように、管理したい変数のデータ型に、*(アスタリスク)をつけて、
int* p_number=&number;
char* p_moji=&moji;
と表現し、各変数のポインタ情報を代入することができます。
イメージとしては下記の図のようになっています。
※1 メモリの番地は例
※2 「~番地」というメモリのアドレスは整数値(int型)なのでint*の変数でもchar*の変数でも4B分の領域が確保されます。
【まとめ】
今回はC言語におけるポインタとは何か、ポインタ変数とは何かについて見てきました。
一言でまとめると、ポインタは「変数のアドレス情報」、ポインタ変数は「アドレス情報を管理するための変数」です。
ポインタをしっかり理解してC言語の山を乗り越えましょう!