一維陣列:元素在記憶體中**連續**排列,a[i] 位址 = base + i * sizeof(type)。
int a[2][3] = {{1,2,3}, {4,5,6}};
// 記憶體佈局 (低位址 → 高位址):
// a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]
// 1 2 3 4 5 6
a[i][j] 位址 = base + (i * COLS + j) * sizeof(int)。a[d1][d2][d3]... 最後一維變化最快,第一維變化最慢。
int *ptr[3]; // 指標陣列
ptr[0] = malloc(2 * sizeof(int));
ptr[1] = malloc(5 * sizeof(int));
ptr[2] = malloc(3 * sizeof(int));
// 每行獨立 malloc,記憶體**不連續**,存取需兩次間接
| 配置方式 | 儲存區 | 連續性 | 生命週期 |
|---|---|---|---|
int a[100][200]; (全域/靜態) | .bss / .data | 完全連續 | 程式全期 |
int a[100][200]; (區域) | 堆疊 | 完全連續 | 函式執行期間 |
malloc 連續大塊 | 堆積 | 完全連續 | 手動 free 為止 |
| 指標陣列分別 malloc | 堆積 | 不連續 | 手動 free 為止 |