• ベストアンサー

& 演算子について教えてください

こんにちは & 演算子はアドレスを求めるものですが、これはアセンブラ出力したものと同じでしょうか それとも、プログラムの実行時のアドレスを求めているのでしょうか よろしくお願い致します

質問者が選んだベストアンサー

  • ベストアンサー
  • KEIS050162
  • ベストアンサー率47% (890/1879)
回答No.2

&演算子で求められるポインターは、条件によって違いますが、実行時のアドレスと考えてください。 http://wisdom.sakura.ne.jp/programming/c/c20.html 条件によって違うというのは、そのポインタが絶対アドレス(例えば、ハードウェアで既に決められているI/O空間とか、グラフィックメモリとか)に配置されているならば、それは絶対アドレスであり、事前に定義されるべきものですが、 相対アドレスである場合、例えば、ある変数のポインタであり、変数がメモリ空間上のどこに割り当てられるかはプログラムがロードされないと分からない場合は、プログラム実行時にアドレスが決まる、 ということになりますね。 C言語で記述して、中間言語(アセンブリ言語)などで出力してみたり、リンカー(ロケーター)などのMAPなどを出力してみたりすると、この辺りが良く理解出来てくると思います。 組み込み系をやられるのであれば、この辺りの知識は必須になってきます。 ご参考に。

noname#192849
質問者

お礼

詳しい説明、ありがとうございます アセンブリで出力すると、理解しやすいのですね リンカーのMAPというのがあるのですね・・・ 勉強してみます

その他の回答 (1)

  • ok-kaneto
  • ベストアンサー率39% (1798/4531)
回答No.1

処理系・コンパイラにより相対アドレスなのか絶対アドレスなのか異なるかもしれませんが、一般的には「実行時のアドレス」ですね。なので、実行するタイミング等によりアドレスは異なる可能性があります。

noname#192849
質問者

お礼

的確な回答、ありがとうございます 昨日から悩んでいたので、スッキリしました 処理系により、相対アドレスか絶対アドレスかことなるのですね・・・

関連するQ&A