配列や文字列の理解ができると、複数のデータを扱えるようになります。
次のステップでは、それらのデータを「どこにあるか」で扱う考え方が重要になります。
その仕組みが「ポインタ」です。
本記事では、ポインタの基本的な仕組みと使い方について解説します。
本記事の目的・学習目標
学習目標は次の3点です。
ポインタとは何かを理解する
アドレスと値の関係を理解する
ポインタを使った基本的な操作ができるようになる
この記事を学ぶことで、データの「場所」を意識したプログラムが書けるようになります。
ポインタとは
ポインタとは、データの場所(アドレス)を管理する仕組みです。
これまでの変数は「値」を扱っていましたが、
ポインタは「その値がどこにあるか」を扱います。
また、ポインタを使うことで、関数の間で同じデータの場所を共有することができます。
そのため、別の関数から元のデータを直接変更することが可能になります。
ポインタを使って値にアクセスすることを間接参照といいます。
メモリアドレスとは
プログラムのデータは、コンピュータのメモリに保存されています。
このメモリには、それぞれ番号が付いており、これをアドレスと呼びます。
イメージとしては
「データが入っている場所の住所」です。
ポインタはこのアドレスを扱うことで、データそのものではなく「どこにあるか」を共有することができます。
ポインタの基本構造
ポインタは次のように定義します。

例:

ここではpというアドレスを値として持つ変数(ポインタ変数)を作成しています。
アドレスの取得(&)
変数のアドレスは「&」を使って取得します。

- a → 値(10)
- &a → aの場所(アドレス)
- p → aの場所(アドレス)を指している
p = &a;ではpというポインタ変数にaのアドレスを代入している。
値の参照(*)
ポインタを使って値を取り出すには「*」を使用します。

*p は「pが指している場所の値」を意味します。
配列とポインタの関係
配列名は、先頭要素のアドレスを表します。

この配列定義をした場合、以下のような配列とアドレスの対応関係になります。

書き方は違いますが、左右で同じ意味になります。
このように、ポインタを使って配列の要素にアクセスできます。
→配列を定義していれば、値もアドレスも表示できる。
まとめ
本記事では「ポインタ」について解説しました。
今回の学習内容は以下の通りです。
- ポインタはアドレスを扱う仕組み
- &でアドレスを取得できる
- *で値を取り出せる
- 配列はポインタとして扱える
ポインタを理解することで、より柔軟なデータ操作ができるようになります。
本記事で登場した用語
本シリーズでは、記事で登場する専門用語を補助知識カテゴリの「④-4 用語辞典」 にまとめています。
①ポインタ
データのアドレスを保持する変数
②アドレス
データが保存されている場所の番号
③参照(*)
ポインタから値を取り出す操作
④アドレス取得(&)
変数のアドレスを取得する操作
⑤間接参照
ポインタを使って値にアクセスすること
⑥*ポインタ名
「(ポインタ名)が指している場所にある値」を意味する
関連記事
次の記事では、ハンドル化 について解説します。
▶ 次の記事
C言語入門:③-4 ハンドル化【応用ロジック】
◀ 前回の記事
C言語入門:③-2 配列と文字列【応用ロジック】
◆同じカテゴリの記事一覧(概要ページ)
C言語入門シリーズ:③-0 応用ロジック【概要】(全5記事)
◆シリーズの記事一覧
C言語入門シリーズ:プログラムの基本構造【記事一覧】

[…] C言語入門:③-3 ポインタ【応用ロジック】 […]
[…] ◀ 前回の記事C言語入門:③-3 ポインタ【応用ロジック】 […]