c - 用C语言演示虚拟内存

标签 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”的值被打印在“Address”位置。

一些快速研究让我明白,添加“&”意味着引用变量“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/

相关文章:

java - SendMessage() 正在发送多条消息,而不是只发送一条消息

c - Rcpp 如何在Rcpp中生成随机多元法 vector ?

c++ - Linux中共享对象和普通库的区别

将 int 指针转换为 void 指针并返回以在另一个函数中使用该值?

c - 如何编写宏以返回逗号和整数或什么都不返回

c - 如何将 while 中的 if-else 语句放入 for 循环中?

c - 如何从被调用函数更改调用函数中的变量?

c - 在 GPU 上使用随机数

c - 如何制作一个具有更多功能的多客户端服务器?

c - libssh 服务器无法导入私有(private) RSA 主机 key