- 1 名前:デフォルトの名無しさん [2010/06/30(水) 10:22:47 ]
- なぜポインタで引っかかる人が多いのか
引っかかる人は何に困惑しているのか
- 647 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 21:32:57.04 ]
- ポインタの理解に苦しむこと30年、その間書籍も20冊以上買ったが
全くモノにならなかった。 しかしついさっき、ようやく、ようやく開眼した。 ポインタ変数と、それが指し示すデータの実体を 同じメモリの中で考えるから位置関係が気になって混乱する。 メモリが一つで一直線にあるのではなく、 データ専用のメモリと、ポインタ専用のメモリが別々にあると 考えて、二つを並べることで理解できた。 つまり地面にメモリが二本垂直に突き立っているイメージ。 右のメモリにはデータがあり、 左のメモリにはポインタ変数があって右のメモリのアドレスを指している。 ポインタのポインタなら、三本めのメモリが立っていて 真ん中のメモリのアドレスを指している。 こんな簡単なことだったんだ。 人生が開けた感じ。とても清々しい気持ちだ。 次は構造体を頑張るぞ。
- 648 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 23:30:43.74 ]
- ポインタをインクリメントしてデータを破壊しても、原因が理解できなかったりw
30年もかかるんなら、プログラマに向いてねぇよ
- 649 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 00:14:24.98 ]
- ダメだこりゃ。
- 650 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 00:18:44.22 ]
- アドレスって名前はダテでは無いんだけどなー。
>>647の頭の中ではMapみたいにkey領域とvalue領域があるのかなー・・・。
- 651 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 01:12:04.93 ]
- 人が人生のすばらしさに目覚めて感動しているのに
相変わらず君らはレベルの低いレスを付けるのだな。 ポインタで引っかかる人は、みな私のように 頭の中にメモリのイメージを作れずに苦労しているのだよ。 二段メモリの概念は素晴らしい。これでポインタの本を書けるかも。 私を30年も苦労させたリッチーを、卒業祝いに一発殴りたいところだが 亡くなったそうだからチャラにしてやる。 これからはプログラムを作りまくるぞー。
- 652 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 08:33:39.67 ]
- いや30年わからないってそれ明らかに向いてないから
- 653 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 10:13:34.99 ]
- 俺の理解だと int *hoge; の場合、宣言してるのはhogeという変数。
*をつけると変数の中身をアドレスにしてアクセスする。アクセス先の型はintとする。 最初に*hogeはint型だが、*を外したらアドレスになる、と覚えようとしたら混乱した。
- 654 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 07:45:17.53 ]
- >>653
そこで多段メモリですよ。 以下のようにイメージすれば、ポインタなんて簡単だ。 先にも言ったとおり、初心者がポインタでつまづくのは、 リニアなメモリの中にデータとポインタが混在したイメージを 頭の中で処理しきれないから。 だったら、処理しやすいイメージに変えてしまえば良い。 実際のメモリ配置がコンパイラの実装に依存する以上、 このイメージが決定的にまずいということはないはず。 1.右のメモリにはデータがある 2.真ん中のメモリには1へのポインタ変数がある 3.左のメモリには2へのポインタ変数がある 4.ポインタ変数に付く*の数は、その変数のあるメモリの 何段前のメモリを見に行くかを示すものである
- 655 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 08:24:45.30 ]
- リンクドリストは要素の数だけメモリがあるのか。大変だな。
|

|