単純なものなら慣れてきましたが*のつく場合、つかない場合が混乱します。
理解に至るまで試行回数が足りてないのもありますが、配列が加わってくるとどうにも…
それに加え、なんとなくで覚えていた内容もあるので、そこも問題に。
もうしばらくポインタでつまっていた方が良いのかもしれない。
もっと理解を深めないと、遊びたくなるようなソフトなんて夢のまた夢ですね。
いつか自分用にWizardryの様なゲームをC言語で作りたい。
やはりポインタ…
Re: やはりポインタ…
私もポインタ理解したか?って言われるとあまり理解していないんですが。
何とか使えますし、メモリをグリグリ操作することもできております。
学ぶより慣れた方が楽かもしれませんね。
このケースではこーいう使い方が出来るのかぁ。みたいな感じで。
何とか使えますし、メモリをグリグリ操作することもできております。
学ぶより慣れた方が楽かもしれませんね。
このケースではこーいう使い方が出来るのかぁ。みたいな感じで。
Re: やはりポインタ…
taketoshi さん
コメントありがとうございます。
悩むよりそっちの方が早いかもしれませんね。
コメントありがとうございます。
悩むよりそっちの方が早いかもしれませんね。
Re: やはりポインタ…
ちょうど同じようなことを他の方の日記にコメントしたばかりですけど…
間接演算子(*)が、変数の中身に働くということを理解できていないのだと思います。
JavaやC#ではそういうところをうまく意識させないようにしているのですよね。
int *p, a;
p = &a;
このとき「pがaを指す」と表現しますが、正確には「変数pに格納されている値が、変数aの記憶域を指す」です。
変数名を使って記憶域にアクセスするとき、間接演算子は要りません。
アドレスを使って記憶域にアクセスするとき、間接演算子が要ります。
上記のコードの後、*pでaの記憶域にアクセスするとき何が起きているかというと、
そのためポインタをふつうの変数と同じように(上記1.)扱えます。
それが二段階になっている理由です。
間接演算子(*)が、変数の中身に働くということを理解できていないのだと思います。
JavaやC#ではそういうところをうまく意識させないようにしているのですよね。
int *p, a;
p = &a;
このとき「pがaを指す」と表現しますが、正確には「変数pに格納されている値が、変数aの記憶域を指す」です。
変数名を使って記憶域にアクセスするとき、間接演算子は要りません。
アドレスを使って記憶域にアクセスするとき、間接演算子が要ります。
上記のコードの後、*pでaの記憶域にアクセスするとき何が起きているかというと、
- 変数名pで変数pの記憶域にある値(変数aの記憶域を指すアドレス)を取り出します。
- 1.で取り出した値(変数aの記憶域を指すアドレス)に間接演算子が作用し、変数aの記憶域を指します。
そのためポインタをふつうの変数と同じように(上記1.)扱えます。
それが二段階になっている理由です。
Re: やはりポインタ…
ISLeさん
コメントありがとうございます。
*が必要ない場合というのを明確に教えてくださったお陰で少し進みそうな気がしてきました。
確かに文章で読んで納得は出来ているものの、そこの理解が足りていないのだと思います。
とても助かります。
コメントありがとうございます。
*が必要ない場合というのを明確に教えてくださったお陰で少し進みそうな気がしてきました。
確かに文章で読んで納得は出来ているものの、そこの理解が足りていないのだと思います。
とても助かります。