C语言书上说,数组名是一个指针常量,可是我每次执行程序后地址都会改变啊

代码如下
#include<stdio.h>
int main()
{
char name[3]={'w','d','d'};
printf("%x\n",name);
}
每次我将输出窗口关闭在执行地址都改变了啊,这怎么能是常量呢,常量应该是不变的啊。请大家帮忙解答!

  指针常量是指在每次运行时指向的地址不能改变,但不是每次运行都指向同一地址,每次运行时系统的内存情况都不同,要根据内存使用进行分配,所以每次运行时的地址几乎都不同。
  但每次执行时指针的指向是始终不变的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-01-08
常量在一次执行时不变,谁告诉你,两次执行也不变,何况%p你不用,非用%x谁告诉你这是正确用法,这是未定义的!在windows里用vc的话,由于每个进程都有自己的地址空间,都从0x00400000开始执行,加载后数据的地址应该一样的,虽然物理地址不同但值应该相同的!至于其他系统由于调度方式不同,地址不同很正常的,也没规定非要相同,这不是标准,何必大惊小怪!
第2个回答  2013-01-08
一楼,这个是字符数组不是字符串。所以,就是3.
为什么不是常量,因为在windows加载程序进入内存的时候本来就不在同一个地方。。。加载及执行的时候都用的地址偏移量、但是你printf出来的还是物理地址。这就导致了不是同一个地址量。本回答被提问者和网友采纳
第3个回答  2013-01-08
每次程序都是被分配同的空间
在每次运行是数组地址不变
第4个回答  2013-01-08
窗口关闭就意味着程序的结束,所以数组名指针就会到了最开始的位置。
相似回答