• ベストアンサー

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

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

noname#192849
noname#192849

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

  • ベストアンサー
  • 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

  • ポインタ演算がうまくできません

    以下のソースを実行すると、直値でアドレスをしていするのは うまくアセンブラに展開され、意図するアドレスを取り出す ことが出来るのですが、変数でアドレス演算させると意図する アドレスが取得できません。  何か記述がおかしいのでしょうか? ご存知の方宜しくお願い致します。 char const test_tbl[] = { -3, -2, -1, 0, 1, 2, 3, 4, 5}; unsigned char *ptr; unsigned char work; #define STA_OFFSET (&test_tbl[3]) void main( void) { // 適切なポインタが取得できる ptr = (STA_OFFSET + 3); // ポインタが取得できない。 work = 3 ptr = (STA_OFFSET + work); }

  • NOT演算

    ~=NOT演算 Javaプログラムで 44をNOT演算で実行すると-45 という結果が得られますが、なぜそのようになるのかがわかりませんので教えてください。

  • ビット演算について

    プログラムを実行した結果が、 10101010 × 11001100 = 10011001 (=の右辺は、演算方法として×の左辺と右辺のNOT XOR、演算処理は1行で行う。) と表示できるプログラムを作成したいのですがよくわかりません。 どなたか教えていただけないでしょうか?よろしくお願いします。

  • メモリの不足による演算ミスは起きるのか?

    よろしくお願いします.現在以下のシステムでPerlでのテキスト処理を行っています. OS: Windows XP Pro CPU: E8400@3.6Ghz Mem: 2G+3G(Ramdisk化) メモリの残量が多いときは演算が正確に出力され,残りが200MBくらいの時(複数の処理を実行している)には,Perlの演算がおかしくなります. プログラムのミスではないと思います. このようなことは起きるのでしょうか. カテゴリーが少し違うかもしれませんが,よろしくお願いします.

  • メモリアドレスについて

    こんにちは サーバをアセンブラで出力したデータを参考にして、クライアントを作っています そこで、アセンブラで出力したデータを使っても、サーバの実行時にはメモリアドレスは変わるものでしょうか もしそうであれば、今やってる事は全て無駄になってしまいます よろしくお願いします

  • 浮動小数演算は実行環境の変化に応じて異なる結果に?

    プログラム(C++)について質問があります. 浮動小数演算を用いると,実行環境の変化に応じて結果が変わってしまうのでしょうか? プログラム中ではdouble演算を頻繁に用いています. (ソースコードは膨大すぎるため,申し訳ありませんが載せることが出来ません.) 小数演算をするために何気なくdouble(もしくはfloat)を使っていました. しかし,コンパイル後の実行ファイルを実行する環境に応じて結果が変わってしまうのでは・・・と思い始めました. そこで,ご質問なのですが, ・浮動小数を扱うと,実行環境(プロセッサ?)に応じて,結果は変わってしまいますか? また,もし誤差が生じてしまうならば,何か対処する方法はありますでしょうか? (整数演算にしろ!・・・と言うのは無しにさせて頂きます.) 初歩的な質問だと思いますが,宜しくお願い致します.

  • 演算子(+=)について

    演算子(+=)について C言語のプログラム中に(1)の文が存在するのですが、(2)の文と同じ意味でよろしいでしょうか? a+=8; ・・・(1) a=a+8; ・・・(2) 教授下さい。 よろしくお願い致します。

  • C言語の四則演算

    C言語で次のようなプログラムを作りたいのですが ソースを教えていただけないでしょうか? 四則演算のみの計算式を標準入力から受け取り計算式の通りに計算を行い計算式と答えを標準出力に出力する どなたか教えてください

  • 論理演算を用いての演算処理について

    論理演算を用いての剰余を行うプログラムを教えてください。

  • 繰り返しの演算

    C言語についてです 数値データのファイルからデータを読み取り四則演算をするプログラムをつくっているのですが、2つでペアの数値データが4つあります。これを繰り返し演算できるようにする関数はありますか?

専門家に質問してみよう