もっとも、以下のような処理の流れを目の当たりにすれば、変数をそのように捉えてしまうのは仕方がない気がします(青色で表示している部分が変数です)。
・画面に、変数(怪物の体力)の値を表示する。
・主人公が怪物に与えたダメージを変数(与えたダメージ)に代入する。
・画面に「主人公は、怪物に変数(与えたダメージ)ポイントのダメージを与えた。」と表示する。
・で、変数(怪物の体力)-変数(与えたダメージ)の値を、変数(怪物の体力)へ代入する。
・もし、変数(怪物の体力)の値が0以下の時は、画面に「怪物を倒した」と表示し、戦闘処理から抜ける。
・そうでない場合は、画面に変数(怪物の体力)の値を表示する。
・続いて、怪物側の攻撃の処理へ飛ぶ
以下省略
#include<stdio.h>
main(){
int a; /* このaが変数だ */
a=15; /* 変数aに、15を代入 */
printf(" 8進数:%o\n",a);
printf("16進数:%x\n",a);
}
でもって、さっきのRPG戦闘処理の一部風に、このプログラムを解析してみます。
(3行目)aを、整数型の変数として宣言する。
(4行目)整数型変数aに15を代入する。
(5行目)画面に、整数型変数aの値を8進数で表示する。
(6行目)画面に、整数型変数aの値を16進数で表示する。
それでは一体、変数とは何なのか?それは、意外にも普通の国語辞典で調べてみると明らかになります。
私が愛用している三省堂の新明解国語辞典第4版には、(プログラムで使われる)変数の意味を、
電子計算機のプログラム中において、記憶場所の名称として用いられる文字(列)
と記しています。これはまさにその通りだと思います。
いろんな値を記憶するのはあくまでメモリであって、正確には変数ではありません。いろんな値は、メモリ上のどこかの位置(アドレス)に記憶されるのです。
つまりメモリ上にある何かの値をいじる際、その値が記憶されているメモリ上のアドレスを指し示す代わりに用いられる名前こそが変数なのでしょう(変数宣言時にアドレスを割り当てている)。
ところがポインタの場合、メモリ上の何かの値をいじる際、その値が記憶されているメモリ上のアドレスをもろに指し示すのです。その為、何かの値を変数の値と捉えつつも、実はそれがメモリ上のどこかのアドレスに記憶されているものであるということを意識できていないと、ポインタといったものが何であるのか理解できない状況に陥ってしまうのです。
説明が下手でごめんなさい。
つづく。