1. ホーム
  2. c

[解決済み] C言語のポインタについて、人々は何を難しく感じているのでしょうか?[閉じる]

2022-04-21 23:54:26

質問

ここに投稿された質問の数々から、ポインタとポインタ演算について理解する上で、人々がかなり根本的な問題を抱えていることは明らかです。

その理由が気になりますね。新石器時代に初めて知ったとはいえ、これまで大きな問題を起こしたことはない。このような質問に対してより良い答えを書くために、人々が何を困難と感じているのかを知りたいのです。

そこで、ポインターに悩んでいる方、あるいは最近悩んだが突然理解できたという方、ポインターのどのような点が問題だったのでしょうか?

解決方法は?

みんなちょっと深入りしすぎじゃないかな。スケジューリングや実際のCPUの動作、アセンブリレベルのメモリ管理などの理解は、実は必要ないのです。

私が教壇に立ったとき、生徒の理解の穴は次のようなものであることがよくわかりました。

  1. ヒープストレージとスタックストレージ。一般的な意味でも、これを理解していない人の多さには、ただただ驚くばかりです。
  2. スタックフレーム。ローカル変数のためのスタックの専用セクションという一般的な概念と、それが「スタック」である理由です。戻り値の場所、例外ハンドラの詳細、以前のレジスタなどの詳細は、誰かがコンパイラを構築するまで安全に残しておくことができます。
  3. キャスティングは、演算子のバージョンや、コンパイラが特定のメモリの塊に与える空き容量を変更するだけです。この問題を扱っているのは、「どの(プリミティブ)変数がXか」という話をするときです。 本当に です。

ほとんどの生徒が、メモリの塊の簡略化した図、一般的には現在のスコープにおけるスタックのローカル変数セクションを理解することができました。一般に、さまざまな場所に明示的な架空のアドレスを与えることが有効でした。

要約すると、ポインターを理解したければ、変数を理解する必要がある、そして現代のアーキテクチャにおける変数の実態を理解する必要がある、ということですね。