我以爲變量的內存地址變得越來越大,直到我試圖驗證碼:爲什麼變量的地址變小?
#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我試過了,它給了我不連續但是增長的內存地址。我可以理解這一點,但我仍然無法理解堆棧向下發展的原因!它只是有一個堆棧限制? –
因爲在很多平臺上,堆棧向下增長,而堆棧向上增長。嘗試在內存中搜索堆棧和堆的圖像。一張照片比任何單詞都多。 –