次の金曜日に,ポインタを教えます.土曜日に,きょうかん酒場を実施するかの連絡を待ちながら,授業準備をしていました.
昨年度までで,教えていた要所をまとめると…
- 「オブジェクト」と「ポインタ」と「配列変数」とを,異なる(色や輪郭の)箱で表現して見せる.
- 配列は固定的,ポインタは身軽.これも1枚の図で見せる.
- ポインタ変数pに対して「p++;」とするとどうなるか,図で示し,時間をとって解説する.
- 文字列の配列について,argvを用いて説明する.これにより,ポインタのポインタだけでなく,コマンドライン引数という新しい「入力のとり方」を知ってもらう.
- 「多次元配列」と「ポインタのポインタ」は違うことを,図とコード例で示す.
それでも理解度*1が高いとは思えません.そこで見直したところ,
- 「ポインタ変数」と「ポインタ値」を区別すること
- 「参照」という用語を注意して使用すること
にあるのではないかと考えました.
『ポインタ変数に格納(代入)できるのは,同じポインタ型の,ポインタ値です.代入でないときのポインタ変数は,そのポインタ変数が保持しているポインタ値となります.』
上の文から「ポインタ」をすべて削除しても,意味が通ります*2.言い換えると,ポインタを考慮しない世界で当たり前のことが,ポインタでも成り立つということです.これを当たり前のことと軽視することなく,きちんと言うことにしましょう.
「参照」については,単項演算子の*を使って「参照する」と言えますし,変数の値が今何であるかを見ることも「参照する」と言えます.しかしこれら2種類の参照は,異なる意味合いを持ちます.そこで,表現を変えてきちんと分けようということです.
前者は「指し示す」を使うようにして,後者は,「参照・代入ともに可」とか書きたいので,そのままにするのはどうでしょうか.この方針で,授業スライドを書き換えてみました.