【发布时间】:2016-09-19 02:00:34
【问题描述】:
#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);
这样做有好处吗?
我可能只需要解释一下“&”符号的作用。
【问题讨论】:
-
如果您不了解
&,您是如何尝试了解虚拟内存的? -
我认为学习操作系统听起来很酷,所以我拿起一本书。我不太了解 C 或 C++。这通常是我学习东西的方式。我所在级别的虚拟内存纯粹是概念性的。目前我不想知道操作系统如何从虚拟地址变为物理地址,因为正如我所读到的,这是一个困难的过程。不过我会的。
-
启用警告并解决所有报告的警告。您的代码调用未定义的行为。
%x是指针的无效转换类型说明符!在开始使用操作系统之前,请选择一本关于 C 或 C++ 的书。它们是不同的语言,因此请选择您想学习的语言。首先学习语言,关于操作系统编程。 -
C 没有引用,
&一元运算符也称为“地址”运算符。 -
我的计划是在阅读 OS 书籍的同时学习 C。我认为我不能像使用 Java 那样直接学习一门语言。我确实找到了一本我喜欢的 C 书籍,所以每当我需要 C 编程帮助时,我都会尝试参考它。
标签: c