在C语言中,数组是经常被用到的重要数据类型,但在实际使用时,往往有很多工程师会出现各种各样的问题,如内存越界、错误的访问、初始化不当等。这其中有很大一个原因是没有彻底理解数组的存储机制,出现了一些非法地址或者非预期元素的访问和引用。因此,今天就来详细讲一下在C语言中,数组到底是怎么存储的。
首先我们来看一个一维数组:
int array[10] = {0};
这是最简单的数组,其内存结构也是最容易理解的,编译器会在内存中划出一段连续的空间用于存储这个数组的元素,并且对于 int 类型来说,每个元素占用的大小为 4 字节。因此,其内存排列如下:
我们可以用下面一段代码验证一下:
#include <stdio.h>
int main() {
int array[10] = {0};
for (int i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
printf("array[%d] - %p - %ld\r\n", i, &array[i], (&array[i] - array) * 4);
}
return 0;
}
上面这段代码会将数组每个元素的元素