我以为变量的内存地址变得越来越大,直到我试图验证码:为什么变量的地址变小?
#include <stdio.h>
int main()
{
int IamfirstVariable = 9;
char array1[10] = {'0','1','2','3','4','5','6','7','8','9'};
char array2[10] = {'0','1','2','3','4','5','6','7','8','9'};
char IamLastVariable = '0';
printf("variable start :%p\n",&IamfirstVariable);
printf("array1 address start :%p end : %p \n",&array1[0],&array1[9]);
printf("array2 address start :%p end : %p \n",&array2[0],&array2[9]);
printf("variable end :%p\n",&IamLastVariable);
return 0;
}
输出:
variable start :0xbfb02c3c
array1 address start :0xbfb02c32 end : 0xbfb02c3b
array2 address start :0xbfb02c28 end : 0xbfb02c31
variable end :0xbfb02c27
我为此stucked。看来最后声明的变量得到最小的地址!
任何人都可以解释这对我吗?
----------------------编辑----------------------- -----------------
我读答案的联系,并得到了anohter问题:
由于堆栈焕发downaward,数组为什么仍然地址向上发光?
如果您有兴趣,请尝试使用堆而不是堆栈,然后查看结果。 –
@YuHao我试过了,它给了我不连续但是增长的内存地址。我可以理解这一点,但我仍然无法理解堆栈向下发展的原因!它只是有一个堆栈限制? –
因为在很多平台上,堆栈向下增长,而堆栈向上增长。尝试在内存中搜索堆栈和堆的图像。一张照片比任何单词都多。 –