C 语言数组的内存布局与访问
在 C 语言中,数组是最基础也最重要的数据结构之一。它由相同类型的元素组成,且在内存中连续存储。理解它的底层机制,对于编写高效、安全的代码至关重要。
一维数组的内存布局
一维数组的元素在内存中是紧密排列的。第一个元素位于最低地址,后续元素依次递增。这种连续性使得我们可以通过指针运算快速定位任意元素。
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
printf("数组第一个元素的地址:%p\n", &arr[0]);
printf("数组第二个元素的地址:%p\n", &arr[1]);
printf("数组第三个元素的地址:%p\n", &arr[2]);
printf("数组第四个元素的地址:%p\n", &arr[3]);
printf("数组第五个元素的地址:%p\n", &arr[4]);
return 0;
}
运行结果会显示地址依次增加 4 字节(假设 int 占 4 字节)。这意味着 &arr[i] 的地址等于 &arr[0] + i * sizeof(int)。
二维及多维数组的内存布局
二维数组可以看作是一维数组的嵌套。虽然语法上像矩阵,但在内存中依然是线性连续的,遵循'行优先'原则。
例如 int arr[2][3] 包含 6 个整数,先存第一行的 3 个,紧接着存第二行的 3 个。
#include <stdio.h>
int {
arr[][] = {{, , }, {, , }};
(, arr);
(, arr[]);
(, arr[]);
(, &arr[][]);
(, &arr[][]);
(, &arr[][]);
(, &arr[][]);
(, &arr[][]);
(, &arr[][]);
;
}


