- ベストアンサー
& 演算子について教えてください
こんにちは & 演算子はアドレスを求めるものですが、これはアセンブラ出力したものと同じでしょうか それとも、プログラムの実行時のアドレスを求めているのでしょうか よろしくお願い致します
- C・C++・C#
- 回答数2
- ありがとう数3
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
&演算子で求められるポインターは、条件によって違いますが、実行時のアドレスと考えてください。 http://wisdom.sakura.ne.jp/programming/c/c20.html 条件によって違うというのは、そのポインタが絶対アドレス(例えば、ハードウェアで既に決められているI/O空間とか、グラフィックメモリとか)に配置されているならば、それは絶対アドレスであり、事前に定義されるべきものですが、 相対アドレスである場合、例えば、ある変数のポインタであり、変数がメモリ空間上のどこに割り当てられるかはプログラムがロードされないと分からない場合は、プログラム実行時にアドレスが決まる、 ということになりますね。 C言語で記述して、中間言語(アセンブリ言語)などで出力してみたり、リンカー(ロケーター)などのMAPなどを出力してみたりすると、この辺りが良く理解出来てくると思います。 組み込み系をやられるのであれば、この辺りの知識は必須になってきます。 ご参考に。
その他の回答 (1)
- ok-kaneto
- ベストアンサー率39% (1798/4531)
処理系・コンパイラにより相対アドレスなのか絶対アドレスなのか異なるかもしれませんが、一般的には「実行時のアドレス」ですね。なので、実行するタイミング等によりアドレスは異なる可能性があります。
お礼
的確な回答、ありがとうございます 昨日から悩んでいたので、スッキリしました 処理系により、相対アドレスか絶対アドレスかことなるのですね・・・
関連する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); }
- 締切済み
- C・C++・C#
- メモリの不足による演算ミスは起きるのか?
よろしくお願いします.現在以下のシステムでPerlでのテキスト処理を行っています. OS: Windows XP Pro CPU: E8400@3.6Ghz Mem: 2G+3G(Ramdisk化) メモリの残量が多いときは演算が正確に出力され,残りが200MBくらいの時(複数の処理を実行している)には,Perlの演算がおかしくなります. プログラムのミスではないと思います. このようなことは起きるのでしょうか. カテゴリーが少し違うかもしれませんが,よろしくお願いします.
- 締切済み
- Perl
- メモリアドレスについて
こんにちは サーバをアセンブラで出力したデータを参考にして、クライアントを作っています そこで、アセンブラで出力したデータを使っても、サーバの実行時にはメモリアドレスは変わるものでしょうか もしそうであれば、今やってる事は全て無駄になってしまいます よろしくお願いします
- ベストアンサー
- C・C++・C#
- 浮動小数演算は実行環境の変化に応じて異なる結果に?
プログラム(C++)について質問があります. 浮動小数演算を用いると,実行環境の変化に応じて結果が変わってしまうのでしょうか? プログラム中ではdouble演算を頻繁に用いています. (ソースコードは膨大すぎるため,申し訳ありませんが載せることが出来ません.) 小数演算をするために何気なくdouble(もしくはfloat)を使っていました. しかし,コンパイル後の実行ファイルを実行する環境に応じて結果が変わってしまうのでは・・・と思い始めました. そこで,ご質問なのですが, ・浮動小数を扱うと,実行環境(プロセッサ?)に応じて,結果は変わってしまいますか? また,もし誤差が生じてしまうならば,何か対処する方法はありますでしょうか? (整数演算にしろ!・・・と言うのは無しにさせて頂きます.) 初歩的な質問だと思いますが,宜しくお願い致します.
- ベストアンサー
- C・C++・C#
- 演算子(+=)について
演算子(+=)について C言語のプログラム中に(1)の文が存在するのですが、(2)の文と同じ意味でよろしいでしょうか? a+=8; ・・・(1) a=a+8; ・・・(2) 教授下さい。 よろしくお願い致します。
- ベストアンサー
- C・C++・C#
お礼
詳しい説明、ありがとうございます アセンブリで出力すると、理解しやすいのですね リンカーのMAPというのがあるのですね・・・ 勉強してみます