首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言內存佈局實戰:打印數組與變量地址看懂棧分配

     編輯:關於C語言

C語言內存佈局實戰:打印數組與變量地址看懂棧分配

代碼:

#include <stdio.h>
int main() {
    int i, arr[10];
    printf("%p\n", &i);
    for (i = 0; i <= 10; i++) {
        printf("&arr[%d]=%p\n", i, &arr[i]);
    }
    return 0;
}

典型輸出(x86,棧向下增長)

0019FF3C  &i
0019FF14  &arr[0]
0019FF18  &arr[1]
...
0019FF38  &arr[9]
0019FF3C  &arr[10]  ← 與 &i 相同!

核心觀察

  • 棧增長方向:地址從高向低分配,arr 低地址,i 高地址。
  • 數組越界:&arr[10] 越界訪問恰好落在 i 的地址上,驗證了上一篇「死循環」成因。
  • 對齊:int 4 字節對齊,地址差均為 4(0x4)。

實戰價值

通過打印地址,可直觀理解:

  1. 局部變量棧分配順序
  2. 數組連續內存特性
  3. 越界訪問的實際後果

建議在調試器中觀察內存窗口,結合反彙編加深理解。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved