[解決済み] C言語のポインタについて、人々は何を難しく感じているのでしょうか?[閉じる]
2022-04-21 23:54:26
質問
ここに投稿された質問の数々から、ポインタとポインタ演算について理解する上で、人々がかなり根本的な問題を抱えていることは明らかです。
その理由が気になりますね。新石器時代に初めて知ったとはいえ、これまで大きな問題を起こしたことはない。このような質問に対してより良い答えを書くために、人々が何を困難と感じているのかを知りたいのです。
そこで、ポインターに悩んでいる方、あるいは最近悩んだが突然理解できたという方、ポインターのどのような点が問題だったのでしょうか?
解決方法は?
みんなちょっと深入りしすぎじゃないかな。スケジューリングや実際のCPUの動作、アセンブリレベルのメモリ管理などの理解は、実は必要ないのです。
私が教壇に立ったとき、生徒の理解の穴は次のようなものであることがよくわかりました。
- ヒープストレージとスタックストレージ。一般的な意味でも、これを理解していない人の多さには、ただただ驚くばかりです。
- スタックフレーム。ローカル変数のためのスタックの専用セクションという一般的な概念と、それが「スタック」である理由です。戻り値の場所、例外ハンドラの詳細、以前のレジスタなどの詳細は、誰かがコンパイラを構築するまで安全に残しておくことができます。
- キャスティングは、演算子のバージョンや、コンパイラが特定のメモリの塊に与える空き容量を変更するだけです。この問題を扱っているのは、「どの(プリミティブ)変数がXか」という話をするときです。 本当に です。
ほとんどの生徒が、メモリの塊の簡略化した図、一般的には現在のスコープにおけるスタックのローカル変数セクションを理解することができました。一般に、さまざまな場所に明示的な架空のアドレスを与えることが有効でした。
要約すると、ポインターを理解したければ、変数を理解する必要がある、そして現代のアーキテクチャにおける変数の実態を理解する必要がある、ということですね。
関連
-
[解決済み] Code::Blocks アプリケーションをコンパイルできない
-
[解決済み] 初期化でポインタ対象の型から修飾語を捨てる
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] C++でextern "C "を使用した場合の効果は?
-
[解決済み] C言語のコードで「:-!」とは何ですか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] C言語における「static」の意味とは?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
-
[解決済み】C言語の関数ポインタはどのように機能するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[C] レポートエラー 代入の左オペランドとしてlvalueが必要
-
VSCodeでCプログラムを書くとエラーになる:ソースファイル "stdio.h" を開くことができない
-
[解決済み] Code::Blocks アプリケーションをコンパイルできない
-
[解決済み] C言語で関数型プログラミングを行うためのツールにはどのようなものがありますか?
-
[解決済み] C - Setデータ構造を実装するには?
-
[解決済み] 配列のすべてのメンバーを同じ値で初期化するには?
-
[解決済み] printfは、フォーマット文字列の中に改行がないと、呼び出し後にフラッシュしないのはなぜですか?
-
[解決済み] プログラム終了前にmallocの後にfreeをしないと本当に何が起こるのか?
-
[解決済み] C 言語の配列へのポインタ/ポインタの配列の曖昧さ解消
-
[解決済み] C言語で "unsigned long "をprintfする方法は?