#include<stdio.h>
int main()
{
char str[10];
printf("The address of string is %x", str);
return;
}
每次运行程序时,都会显示相同的内存地址。为什么会这样? 什么时候分配内存?
答案 0 :(得分:0)
首先,您的计划会导致undefined behavior。
您必须使用%p
来打印指针。另外,FWIW,如果提供的参数不是字符指针,则必须将其转换为void *
。
也就是说,内存分配取决于实现。 C标准没有规定任何有关地址范围分配方案的内容。
答案 1 :(得分:0)
由于您的str
具有功能范围且没有存储类说明符,因此默认情况下它具有自动存储持续时间。这意味着只要执行不离开其范围(main()
函数),它就存在。因此,您的问题的答案是:每当输入main()
时,实现必须为此变量保留内存。但是实施仍然可以提前做到,因为这不会导致不同的可观察行为。
至于你的另一个问题,C的规范中有 nothing 告诉你关于地址的任何信息。最有可能的是,您的实现使用调用堆栈来存储本地(自动)变量,并且在您的系统中,此调用堆栈始终位于同一虚拟地址。但这是猜测,实现可以做任何事情。