C言語の「ポインタ」とは「実メモリアドレスが格納された特殊な変数」のことです(NetwingsJ)

どうも(・∀・)ノ これって、本気で語り始めると、1冊の本が書けちゃうぐらい、奥が深いのですが、要はそういうことです。

……それじゃあまずいか。

ポインタから一般の変数に代入演算子で代入する、それは、今の実行箇所のアドレスをヒョイと持ってくるだけの話です。

でもね、その逆。

一般の変数からポインタに代入演算子で代入する。そうすると、どうなるか。強制的に、そのメモリアドレスから機械語(マシン語)を実行する意味になります。いま実行しているところから、無理やり、ジャンプさせちゃうので、取り扱いが非常に危ないです。注意が必要です。

そのアドレスに、きちんとしたプログラムがメモリ上で書かれて、置いてあればいいのですが、プログラムが次に実行しようとしているメモリアドレス以外に飛んじゃうので、ポインタの制御って、慣れた方しか使っちゃまずいこともあるのです。

なぜならば、メモリマッピングの際に、システムに依っては、異なるメモリマップになっている場合があります。つまり、実行環境にものすごく依拠したものです。

そして、扱うビット数(x64か、x86か)によっても違って来ます。また、組み込み製品ですと、もし、そのアドレスが、メモリマップドI/Oになっていたら、余計に意味からして異なります。つまり、そこが RAM ではなくて、もしかしたら、ただのI/Oポートになっていたりもするので、これまた話がややこしくなるのですよ。

オジンが空で説明出来るのは、この辺ぐらいまでかな? もっと突っ込んでお知りになりたい場合は「C言語ポインタ完全制覇」とかいう本も売ってますよ。

ではでは(・∀・)ノ

(文:ネットウイングス執筆班 主筆 田所憲雄 拝)

ネットウイングス Netwings.JP

兵庫県尼崎市のネットウイングスです。お役立ちITコラムを発信しています。(主にAmeba Owndで)パソコンのお医者さんとして、ボランティア活動しています。 フォローされる方は、お気軽に。うちは会社ではありませんが、文筆業(コラムなど)情報・通信業(情報セキュリティ業・情報インフラ業)になるんでしょうね。

このページに掲載された記事の名称や内容は、各社の商標または登録商標です。また、ページ内でご紹介しているソフトウェア、バージョン、URL等は、各ページの発行時点のものであり、その後、変更されている場合があります。なお、画像や文章の著作権は、ベルヌ条約・万国著作権条約・著作権法で定めのある通り、原著作者に帰属します。

なお(文:ネットウイングス執筆班)とあるのは、文責はすべて全員が負うという意味です。