用C语言演示虚拟内存

时间:2016-09-19 02:00:34

标签: c

#include <stdio.h>
#include <unistd.h>

int staticVar = 0;

int main()
{
    staticVar += 1;

    sleep(10);
    printf("Address: %x\nValue: %d\n", &staticVar, staticVar);

    return 0;
}

我很困惑这个程序打印出变量“staticVar”的地址。从播放代码我注意到,如果你将printf语句更改为此...

printf("Address: %x\nValue: %d\n", staticVar, staticVar);

然后变量“staticVar”的值打印在“地址”位置。

一些快速的研究让我明白了“&amp;”的加入意味着引用了变量“staticVar”,并且printf语句中的“%x”以十六进制打印出值。即使有这些信息,我仍然感到困惑,为什么这样做。

我还在网上看到,您可以使用此行打印出地址到某个变量...

printf("Address: %p\n", (void*) &staticVar);

这样做是否有优势?

我可能只需要解释一下“&amp;”符号有效地做了。

2 个答案:

答案 0 :(得分:2)

首先,您应该熟悉指针的概念。幸运的是,有很多很棒的参考文献like this(前5个部分是重要的)。

做了一些指针阅读后,底线是&amp;是C中的运算符,它返回它前面的变量的地址。(它实际上可以有两种用途,具体取决于它使用的上下文,另一种是按位AND运算符,但你不应该担心直到你需要使用它。)

此外,您应始终使用%p打印指针。原因是它使您的代码更加portable to different operating systems

 printf("Address: %p\n", (void*) &staticVar);

这段代码可以工作,但我不会转换为void指针,因为这种类型转换是不必要的,并且使代码的可读性降低。试试这个。

 printf("Address: %p\n", &staticVar);

答案 1 :(得分:0)

在此特定上下文符号'&amp;'中有效地用它后面的任何变量替换变量的地址。