请根据以下示例解释虚拟地址和物理地址之间的区别。请说明这里具体使用哪个地址,以及如何在同一个地方使用其他地址。还有,这两者怎么总能区分开来。
代码:
if(fork()==0)
{
a=a+5;
printf("%d%d", a, &a);
}
else
{
a=a-5;
printf("%d%d", a, &a);
}
&a
两个语句中都指的是什么地址?
请根据以下示例解释虚拟地址和物理地址之间的区别。请说明这里具体使用哪个地址,以及如何在同一个地方使用其他地址。还有,这两者怎么总能区分开来。
代码:
if(fork()==0)
{
a=a+5;
printf("%d%d", a, &a);
}
else
{
a=a-5;
printf("%d%d", a, &a);
}
&a
两个语句中都指的是什么地址?
如果您在 if & else 块中独立声明变量 a,则 &a 可能会引用两个不同的地址。
但是如果变量 a 在 "if" 之上声明,那么在任何一种情况下,变量 "a" 都将具有相同的物理地址,可以被 &a 访问。
当您从“a”中添加或减去值时,您正在更改存储在存储“a”的内存中的内容,这意味着 a 的值,而不是地址。
在您的情况下,您不会更改 a 的地址,因为它是物理地址。
如果你真的想玩这个地址,那么有一个指向类似的指针
*p = &a;
p+=5;
p-=5;
这样,您可以在内存中向前和向后移动五个内存块(一个块大小取决于变量“a”的类型)。
有关虚拟地址的更多信息:请参阅此处
希望有帮助。