どうも(・∀・)ノ これって、本気で語り始めると、1冊の本が書けちゃうぐらい、奥が深いのですが、要はそういうことです。
……それじゃあまずいか。
ポインタから一般の変数に代入演算子で代入する、それは、今の実行箇所のアドレスをヒョイと持ってくるだけの話です。
でもね、その逆。
一般の変数からポインタに代入演算子で代入する。そうすると、どうなるか。強制的に、そのメモリアドレスから機械語(マシン語)を実行する意味になります。いま実行しているところから、無理やり、ジャンプさせちゃうので、取り扱いが非常に危ないです。注意が必要です。
そのアドレスに、きちんとしたプログラムがメモリ上で書かれて、置いてあればいいのですが、プログラムが次に実行しようとしているメモリアドレス以外に飛んじゃうので、ポインタの制御って、慣れた方しか使っちゃまずいこともあるのです。
なぜならば、メモリマッピングの際に、システムに依っては、異なるメモリマップになっている場合があります。つまり、実行環境にものすごく依拠したものです。
そして、扱うビット数(x64か、x86か)によっても違って来ます。また、組み込み製品ですと、もし、そのアドレスが、メモリマップドI/Oになっていたら、余計に意味からして異なります。つまり、そこが RAM ではなくて、もしかしたら、ただのI/Oポートになっていたりもするので、これまた話がややこしくなるのですよ。
オジンが空で説明出来るのは、この辺ぐらいまでかな? もっと突っ込んでお知りになりたい場合は「C言語ポインタ完全制覇」とかいう本も売ってますよ。
ではでは(・∀・)ノ
(文:ネットウイングス執筆班 主筆 田所憲雄 拝)
0コメント