#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”的值打印在“地址”位置。

通过一些快速的研究,我了解到“&”的添加意味着已引用变量“ staticVar”,并且printf语句中的“%x”以十六进制形式打印出该值。即使有了这些信息,我仍然对为什么起作用感到困惑。

我还在线阅读了您可以使用此行将地址打印到某些变量的信息...

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


这样做有好处吗?

我可能只需要对“&”符号的作用进行解释。

最佳答案

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

读完一些指针后,最底线是&是C中的一个运算符,它返回其前面的变量的地址。 (根据使用的上下文,它实际上可以有两种用途,另一种是按位AND运算符,但在需要使用它之前,您不必担心)。

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

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


该代码将起作用,但是我不会强制转换为void指针,因为这种类型转换是不必要的,并且使代码的可读性降低。试试这个吧。

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

关于c - 用C演示虚拟内存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39564387/

10-12 05:45