今日もプログラミングの授業です.前々回に配列,前回にポインタを取り上げましたが,授業中のアンケートを見る限り,学生が正しく理解してくれたとは言い難い状況です.
こういうときは,たとえ話を考えてみよう…ということで思いついたのが,「家」,正確には「マンション」です.
- 配列変数は要素数に応じたオブジェクトを作るが,ポインタ変数は参照先しか作らない.
- 配列変数が作るのは「マンション」です.同じつくりの居室を,指定した数だけ作ります.
- 一方,ポインタ変数が作るのは,その中の住人です.
- マンションの管理者は,配列領域全体を管理しています.
- 配列変数の初期化がなくても,要素は書き換えられるが,ポインタ変数の初期化がないとき,指し示す先を書き換えると不定になる.
- ポインタ変数の値は変えられるが,配列変数は変えられない.
- 居住者は流動的ですが,マンションは簡単に動かせません.
- 配列変数もポインタ変数も,「変数名[変位]」でオブジェクトを決めることができる.
- 居住者は,「お隣さん」を見ることができます.自分がいる部屋(ポインタ値)を起点として,何軒先(負の値でもかまいません)に何があるかを知ることになります.
- なお,「ポインタ変数[変位]」や「ポインタ変数 + 変位」だけでは,もとのポインタ変数は動きません.それらは,(一時的な)焦点を定めるという意味にすぎません.「そっちのほうがいい」となれば,「ポインタ変数 += 変位;」とか,「ポインタ変数++;」なんてのをすることになります.
- マンション管理者も,先頭の部屋を起点として,各部屋を見ることができます.
- 同じ配列領域を指し示すポインタの間で,減算できる.
- どの部屋にも電話機がありまして,部屋の居住者同士で「いま,どこなん」「おれ,ここやで」のコミュニケーションができます*2.管理人さんの電話は,ここでも,マンションの先頭の部屋にあります.