
C言語入門|間接演算子の本当の力
メモリ上に「変数を生み出す」魔法
やった!
さっきの型付きポインタのコード、ちゃんと動きましたね。
ここまで来たあなたは、
「ポインタはアドレスを扱うための型」
というところまでは、もうしっかり理解できています。
では次の一歩です。
今回の主役は、あの記号― *(アスタリスク)。

なぜ C 言語は「王」と呼ばれるのか
C 言語が特別視される理由は、とてもシンプルです。
| 特徴 | 内容 |
|---|---|
| 高水準 | 変数・関数・制御構文が使いやすい。 |
| 低水準 | メモリやCPUを直接扱える。 |
多くの高級言語では、
メモリの番地そのものを意識して操作することはできません。
なぜなら、
- 変数の配置場所は OS が管理する。
- 開発者が勝手に番地を指定できない。
という安全設計になっているからです。
もし「好きな番地」を使えたら?
ここで、ちょっと想像してみてください。
もし私たちが
メモリ上の好きな番地を
変数として扱えたら……?
- 任意の場所を読み取れる。
- 任意の場所に書き込める。
……ちょっと怖いですが、
C 言語では、それができてしまいます。
その鍵を握るのが、
今回のテーマである 間接演算子 です。
間接演算子(*)の書式と役割
まずは基本の形から整理しましょう。
書式
*ポインタ変数何をする演算子か
| 項目 | 内容 |
|---|---|
| 入力 | ポインタに格納されたアドレス |
| 動作 | その番地を先頭とする領域を読み書き |
| 結果 | その型の変数に「化ける」 |
ここが最大のポイントです。
間接演算子の本当の働き
*演算子は、単に値を取り出す演算子ではありません。
本質的な役割
指定されたアドレス範囲を巻き込み、
その場で「仮想的な変数」を生み出し、
それに化ける
つまり、
- 変数が事前に宣言されていなくても
- メモリ上にあれば
- その場で変数として扱える
という、ものすごい力を持っています。
型付きポインタと組み合わさったときの力
たとえば、次のような状況を考えてみましょう。
| ポインタの中身 | 型 |
|---|---|
| 1000 | int* |
このとき、
int* 型変数 x に 1000 が格納されているとき
*xと書くと、
- 1000〜1003 番地を
- int 型の変数として扱う
ことになります。
実在するかのような int 変数が、その場で誕生する
─これが、間接演算子の正体です。
極端な例で見る「王の力」
次は、理解を深めるための 極端な例 です。
※ 絶対に実行してはいけません。
// メモリ 0〜3 番地を int 変数として読む
int* p = 0;
printf("%d\n", *p);
// メモリ 9000〜9001 番地を short 変数として書き換える
short* q = 9000;
*q = 500;このコードが意味することを、表で整理しましょう。
| 式 | 意味 |
|---|---|
| int* p = 0 | 0番地を先頭とする int 変数を指す。 |
| *p | 0〜3番地を読む。 |
| short* q = 9000 | 9000番地を先頭とする short 変数 |
| *q = 500 | 9000〜9001番地を書き換える。 |
つまり、
メモリ空間のどこでも、変数を生み出せる
ということです。
なぜ危険なのか
この力が危険な理由は、次の点にあります。
| 理由 | 内容 |
|---|---|
| 保護を無視 | OSが守っている領域も触れる。 |
| 影響範囲が不明 | どこを壊すか分からない。 |
| 即クラッシュ | プログラムやOSが停止する。 |
だからこそ、
この力は 厳重に理解したうえでのみ使うべきもの なのです。
もう一度、基本の例に戻ってみよう
では、安全な例に戻りましょう。
int value = 40;
int* pValue = &value;
*pValue = 75;このとき起きていることは、実はとても単純です。
| 表現 | 実体 |
|---|---|
| value | ある番地を先頭とする int 変数 |
| *pValue | 同じ番地を先頭とする int 変数 |
つまり、*pValue は
value = 75;と書くのと、完全に同じ意味 になります。
*pValue は value の「別名」にすぎない
ここはとても大切なので、はっきり言います。
*pValue とは、
あるメモリ領域に付けられた
「もう一つの名前」
名前が違うだけで、
指している実体は同じ なのです。
理解が追いつかなくて当然
この感覚は、最初は誰でも混乱します。
- 変数が消えた気がする。
- 勝手に生まれた気がする。
- どこを触っているか分からない。
でも大丈夫です。
車の運転と同じで、
- 目で確認
- 手順を追う
- 何度も書く
これを繰り返すうちに、
自然と「見える」ようになります。
ここまで理解できたあなたは、
「ポインタで値を読む人」から
「ポインタで世界を書き換えられる人」
への入口に立っています。
次はいよいよ、
この力を 安全に使いこなす方法 に進みましょう。
