本地变量的分配地址是由编译器的编译策略决定的,看图片,楼主使用的应该是VS,VS的C/C++编译器版本经典就有600、1000、1400等,而且每个版本编译策略还分debug、release模式,还有x86、x64平台之分,这些都会影响变量的分配地址。你这个程序带有一定的偶然性,而实际上这些地址之间没什么联系,只是因为简单,所以出现了一些幻象。尤其是vs的debug模式,为配合vs的条件断点、变量追踪等调试功能而预留了一部分内存,具体方法是微软的机密,没有公开资料具体描述如何分配变量地址。我改进了一下你的代码:[C] 纯文本查看 复制代码 int ints1[11], ints2[11];
int i;
char j;
long k;
short l;
double m;
float n;
char chars1[11], chars2[11];
printf("int:%p\n", &i);
printf("char:%p\n", &j);
printf("long:%p\n", &k);
printf("short:%p\n", &l);
printf("double:%p\n", &m);
printf("float:%p\n", &n);
for (i = 0; i < 22; i++)
{
printf("%04d:%p,%p,%p,%p\n", i, &ints1[i], &ints2[i], &chars1[i], &chars2[i]);
}
x86debug:
x64debug:
x86release:
x64release:
|