-1

次の例に基づいて、仮想アドレスと物理アドレスの違いを説明してください。ここで具体的に使用されているアドレスと、同じ場所で他のアドレスを使用する方法を説明してください. また、この 2 つを常に区別するにはどうすればよいでしょうか。

コード:

if(fork()==0)
 {
   a=a+5;
   printf("%d%d", a, &a);
 }
else
 {
   a=a-5;
   printf("%d%d", a, &a);
 }

&a両方のステートメントで、どのアドレスが参照されていますか?

4

1 に答える 1

0

if & else ブロックで変数 a を個別に宣言すると、&a は 2 つの異なるアドレスを参照する場合があります。

しかし、変数 a が "if" の上で宣言されている場合、どちらの場合でも、変数 "a" は &a によってアクセスできる同じ物理アドレスを持つことになります。

「a」に値を加算または減算すると、「a」が格納されているメモリに格納されている内容が変更されます。これは、アドレスではなく、a の値を意味します。

あなたの場合、物理アドレスであるため、aのアドレスを変更していません。

あなたが本当にアドレスをいじりたいのなら、いいねを指すポインタを持ってください

 *p = &a;
 p+=5;
 p-=5;

このようにして、メモリ内で 5 つのメモリ ブロックを前後に移動できます (1 つのブロック サイズは、変数 "a" の型によって異なります)。

仮想アドレスの詳細については、こちらを参照してください

それが役立つことを願っています。

于 2014-02-16T05:13:58.133 に答える