🔍 人間がコンピュータになる訓練
🎯 代入が「右辺を計算して左辺に上書きする」動作だと理解し、値の推移を正確に追える
まずは一番やさしい形、代入だけのプログラムをトレースします。ここを完璧にしておくと、あとがずいぶん楽になります。
代入は「上書き」である
C言語の = は、数学のイコールではありません。右側を計算して、左側の箱に入れるという命令です。読むときは右から左へ、と覚えてください。
int a = 3;
a = 5;2行目のあと、a の値は5です。3はどこかに残っているのではなく、消えています。箱に入るものは常に1つだけ。これが変数の基本的な性質です。
自分自身を使う代入
初心者がつまずく形がこれです。
a = a + 1;数学として読むと成り立たない式ですが、命令として読めば何も不思議はありません。
a が3なら 3 + 1 で 4)a に入れる(a が4になる)右辺の a は「古い値」、左辺の a は「新しい入れ物」です。この順番さえ守れば、絶対に間違えません。
動かして確かめる
下のビジュアライザで、1ステップずつ進めてみてください。行が進むたびに、箱の中身が書き換わっていく様子が見えます。
🧪 ここはメモリの中身を1ステップずつ追う「メモリビジュアライザ」の場面です(アプリ本体で動きます)。
進めながら、次の行を実行する前に自分の答えを口に出すのがおすすめです。当たれば理解できている、外れればそこが弱点です。ただ眺めるのと、予想してから確かめるのとでは、身につき方がまったく違います。
トレース表で書くとこうなる
int a = 3; のあとに a = a + 1; を実行した場合をトレース表にすると、変化が一目で分かります。
行 | a | 説明
---+---+--------------------------
1 | 3 | aが作られ、3が入る
2 | 4 | 右辺 3+1 を計算して代入たった2行ですが、この「1行進むごとに1行書く」動作が全部の土台です。変数が5個に増えても、ループが100周しても、やることは同じです。
古典的な難問: 値の交換
2つの変数の中身を入れ替えたい、という場面を考えます。素直にこう書くと失敗します。
a = b;
b = a;a が3、b が7のとき、1行目で a は7になります。すると2行目の右辺 a はもう7なので、b にも7が入ります。3が消えてしまいました。上書きは取り消せないからです。
正しくは、一時的な置き場をもう1つ用意します。
tmp = a;
a = b;
b = tmp;これは、両手がふさがっている人が物を持ち替えるとき、いったん机に置くのと同じです。この形は今後あらゆる場面で出てくる定番なので、トレース表で必ず自分の手で確認しておいてください。ちなみに、なぜ失敗するのかを説明できるようになると、代入の理解は完成です。「上書きされた値は取り戻せない」——この一文がすべての理由になっています。
値を入れておくための名前付きの箱のこと。名前をつけることで中身を自由に出し入れできる、プログラムの記憶場所にあたる。変数名は自由に付けられるが、意味の分かる名前にすると読みやすいコードになる。
プログラムを1行ずつ実行したときの、各変数の値の変化を表にまとめたもの。頭の中でコンピュータになりきって処理を追いかける道具にあたる。変数の値がどう変わっていくかを紙の上で追うことで、頭の中の実行イメージがはっきりする。
もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。