#include <stdio.h>
int main() {
int num=1234;
printf("%p", &num);
return 0;
}
//Ouput:
//0xffffcbfc
0xffffcbfc是RAM还是硬盘地址存储器?
答案 0 :(得分:6)
严格地说,该代码表现出不确定的行为。您必须将指针转换为void *
,因为这是%p
所期望的:
printf("%p\n", (void *) &num);
从C的角度来看,它可能没有具体说明究竟是什么类型的物理设备保存地址,但在典型的计算机上它将是RAM。
答案 1 :(得分:1)
这是一个堆栈地址,它本质上是RAM。它不是真正的物理RAM地址(在现代系统中),实际上只反映了内核的簿记。
答案 2 :(得分:1)
具有HD的计算机上的程序总是由OS加载到RAM中并从那里执行。所有地址都将指向RAM。
您无法直接从程序中处理高清内存,您必须通过文件系统。
答案 3 :(得分:1)
严格来说,当打印变量的地址时,您看到的地址来自虚拟内存(在大多数情况下,您将在使用virtual memory的操作系统上运行程序。)
如果您的操作系统不使用虚拟内存,则该地址将直接来自RAM。
要运行程序,必须将其加载到内存(RAM)中。简而言之,您将不从硬盘中获取地址。