#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/