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

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

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

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

でもね、その逆。

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

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

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

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

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

ではでは(・∀・)ノ

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

ネットウイングス

兵庫県尼崎市のネットウイングスは、個人で2002年から始めた、日本のユースウェアにかかわる団体でして、パソコンに関する個人に向けた、パソコンのユーザービリティを高めるための活動をしています。

このページに掲載された記事の名称や内容は、各社の商標または登録商標です。意匠権も同様です。また、ページ内でご紹介している記事、ソフトウェア、バージョン、URL等は、各ページの発行時点のものであり、その後、古くなったり、変更されている場合があります。

The names and content of the articles on this page are the trademarks or registered trademarks of the respective companies. The same applies to design rights. The articles, software, versions, URLs, etc. referred to in the pages are current at the time of publication of each page and may have since become outdated or changed.