ポインタはメモリアドレスです.ただし,ポインタは「そのアドレスにどんな型のデータが格納されているか」という情報を持つ点が,単なるアドレスと異なります.
(例解UNIXプログラミング教室, p.27)
きわめて明快な説明です.感動しました.明日の授業でポインタの説明をするのですが,急きょ,資料に取り入れました.
ただ,直後の
ポインタ操作の基本は,アドレス演算(&),ポインタ変数の宣言(*),間接演算(*)の3つです.
(同上)
について,「ポインタ変数の宣言(*)」は,他の二つと別に説明するほうが,分かりやすいのではないかと感じます.
よくあるポインタの間違い(pp.29-31)も興味深いです.
ポインタの間違い(1): 未初期化ポインタ変数の間接演算
ポインタの間違い(2): 未初期化ポインタ変数を引数に渡す
ポインタの間違い(3): 局所変数へのポインタを返り値にする
について,いずれもその通りで*1,講義で力説emphasizeし,演習で見かけたらその都度指導しています.ですが,もう一つ,初学者によく見られる間違いがあります.
- int *p;と書いたとき,変数は「*p」
正しい理解は
- int *p;と書いたとき,変数は「p」であり,特にポインタ変数と呼ばれる
- pに適切なアドレスを割り当てた上で,「*p」は,pの指し示す先を変数であるかのようにして,参照したり値を変えたりできる