間接アドレス

まず、メモリの1000番地に読み込まれた次のプログラムを見てください。
実行した結果、1500番地には 501 、1501番地には 5 が代入されます。

+--------+--メモリ------------------+
|[番地]  | [内容]                   |
+--------+--------------------------+
|0000    |   (略)                   |
+〜〜〜〜+〜〜〜〜〜〜〜〜〜〜〜〜〜+
|1000    |相対アドレス500番地に     |
|        |相対アドレス501番地の     |
|        |アドレスを代入            |
+--------+--------------------------+
|1001    |相対アドレス500番地の値の |
|        |指し示すアドレスに5を代入 |
+〜〜〜〜+〜〜〜〜〜〜〜〜〜〜〜〜〜+
|1500    |0                         |
+--------+--------------------------+
|1501    |0                         |
+--------+--------------------------+

今回は、前回と比べて少々難しくなっています。
順々に説明していきましょう。

まず、1000番地の命令により相対アドレス500番地に相対アドレス501のアドレスを代入しています。
即ち、1500番地に 501 が代入されます。
次に、1001番地の命令で相対アドレス500番地の値の指し示すアドレスに5を代入しています。
相対アドレス500番地の値は 501 なので相対アドレス501に5を代入するのと同じ処理になります。

一見、意味を成さないような処理にも思えますが、
これからのC言語のプログラミングにおいて大きな意味を示すので、
ここは必ず理解しておいてください。

     メモリ
+--------+------+
|[番地]  |[内容]|
+--------+------+
|1000    | (略) | プログラム開始地点
+〜〜〜〜+〜〜〜+
|1500    |501   |-----+
+--------+------+     | アドレスを指し示す
|1501    |0     | <---+
+--------+------+