ポインタの難しさ
僕はポインタの概念を理解するのにかなり苦労した。 一度分かってしまえば単純なんだけど、その壁を越えるのは大変。 たぶん、エクスプローラからブートセクタが見えない話と同じで、考え方の枠を広げるまでは理解できなかったんだと思う。 理解する障壁になっていたのは…
- 一見すると他の変数と同じように見える(まぁ、値がアドレスというだけで、同じなんだけど)
- 最初に学ぶ時点では何に使えるのかが分からない
例えば、C言語の教科書に以下のようなサンプルが出てくる。
int a; int *x; a = 10; x = &a; *x = 20; printf("%d\n", a);
今見ると、ポインタの本質を書いてると思う。 でも、分かっていない時は、以下のプログラムとの違いが分かんなかった。
int a; a = 10; a = 20; printf("%d\n", a);
なんでわざわざ「*」とか「&」を使ってaの値を変える必要があるの?と。 配列とポインタが一緒というなら、ポインタを使わずに配列を使えばいいじゃない?とも。
たぶん、ある機能や概念を説明するときには、そのものの性質だけを説明しちゃダメで、それがなぜ必要なのかを先に説明したほうがいいんだろう。 ポインタを教えるときは、ポインタを使わないと実現できない例を最初に見せるといい気がする。 僕は関数の参照渡しの説明を聞いて、ようやくポインタの役割を理解できたなぁ。 (もっといい例がありそう。思いつかないけど。双方向リストとか?)
追記
やっぱり文字列操作のプログラムかなぁ。 でも、ある程度は配列だけで頑張れちゃうんだよね…。