-1

请根据以下示例解释虚拟地址和物理地址之间的区别。请说明这里具体使用哪个地址,以及如何在同一个地方使用其他地址。还有,这两者怎么总能区分开来。

代码:

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 可能会引用两个不同的地址。

但是如果变量 a 在 "if" 之上声明,那么在任何一种情况下,变量 "a" 都将具有相同的物理地址,可以被 &a 访问。

当您从“a”中添加或减去值时,您正在更改存储在存储“a”的内存中的内容,这意味着 a 的值,而不是地址。

在您的情况下,您不会更改 a 的地址,因为它是物理地址。

如果你真的想玩这个地址,那么有一个指向类似的指针

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

这样,您可以在内存中向前和向后移动五个内存块(一个块大小取决于变量“a”的类型)。

有关虚拟地址的更多信息:请参阅此处

希望有帮助。

于 2014-02-16T05:13:58.133 回答