アドレスを扱う魔法の道具「ポインタ(pointer)」とは?C言語の基本をやさしく解説
C言語を学ぶ上で避けて通れないのが「ポインタ(pointer)」です。
ポインタとは、変数そのものではなく「その場所(メモリアドレス)」を扱う特別な変数です。
難しそうに見えますが、1つずつ学べばきちんと理解できます。
ポインタとは?
ポインタとは、「変数がどこにあるか(メモリ上の住所)」を記録する変数です。
値そのものではなく、値が保存されている場所(アドレス)を指すのが特徴です。
基本の使い方
int a = 10; // 普通の変数
int *p; // ポインタの宣言(int型を指す)
p = &a; // aのアドレスをpに代入
*p
:ポインタが指している先の値を表す(間接参照)
&a
:変数aのアドレスを取得
ポインタのイメージ
以下のような関係になります:
a : 値 10
&a : aのアドレス(例:0x7ffe...)
p : &a(つまりaのアドレス)
*p : aの中身(10)にアクセス
printfで確認してみよう
#include <stdio.h>
int main(void) {
int num = 100;
int *ptr = #
printf("numの値:%d\n", num);
printf("ptrが指す値:%d\n", *ptr);
printf("numのアドレス:%p\n", &num);
printf("ptrの値(アドレス):%p\n", ptr);
return 0;
}
ポインタを使うメリット
- 関数に「値そのもの」ではなく「場所」を渡せる(参照渡し)
- 配列や文字列の操作に便利
- 動的メモリ確保(
malloc
など)に必須
- データ構造(リスト・木構造など)を実現できる
注意点
- 正しくないアドレス(NULLやゴミ値)を使うと危険
*
と&
の使い方を混同しないように
- 使う前に必ず初期化を!
まとめ
ポインタとは、変数の「アドレス(場所)」を記録・操作するための特別な変数です。
最初は難しく感じますが、*
(間接参照)と&
(アドレス演算子)を意識しながら、実際に手を動かしてみることが理解への近道です!