为什么 C 数组元素(看似)存储在 4 个块中?
Why are C array elements (seemingly) stored in blocks of 4?
我正在学习 C 语言并开始研究指针。据我了解,当您声明一个数组时,数组的地址是该数组中第一个元素的地址。所有其他元素都连续存储在内存中。
当我运行这段代码使用online C compiler at onlinegdb.com ...
int main()
{
int num[5] = { 0, 1, 2, 3, 4 };
for (i = 0; i < 5; i++) {
printf("num[%d] has the value %d and is stored at address %p\n",
i, num[i], &num[i]);
}
return 0;
}
我观察到以下...
num[0] has the value 0 and is stored at address 0x7ffe9973e600
num[1] has the value 1 and is stored at address 0x7ffe9973e604
num[2] has the value 2 and is stored at address 0x7ffe9973e608
num[3] has the value 3 and is stored at address 0x7ffe9973e60c
num[4] has the value 4 and is stored at address 0x7ffe9973e610
所以据我所知,C 编译器为 num[0]
选择一个内存位置,然后每个后续元素都放置在四个地址之外。我知道每个编译器都可能不同并且有不同的行为,但如果这是标准的 - 为什么数组元素似乎存储在四个块中?为什么地址模式不是 0x7ffe9973e600
、...601
、...602
、...603
、...604
?每个元素是否占用多个地址?
内存中的地址代表1个字节的数据。 num
数组是 int
类型,每个数组占用 4 个字节。所以要存储一个元素 num[0]
我们需要占用 4 个字节的内存,并且由于每个字节需要 1 个内存地址,因此它们有 4 个内存地址的间隙。如果它是一个 char
数组,那么您会看到序列 0x7ffe9973e600, ...601, ...602, ...603, ...604 等等。
我正在学习 C 语言并开始研究指针。据我了解,当您声明一个数组时,数组的地址是该数组中第一个元素的地址。所有其他元素都连续存储在内存中。
当我运行这段代码使用online C compiler at onlinegdb.com ...
int main()
{
int num[5] = { 0, 1, 2, 3, 4 };
for (i = 0; i < 5; i++) {
printf("num[%d] has the value %d and is stored at address %p\n",
i, num[i], &num[i]);
}
return 0;
}
我观察到以下...
num[0] has the value 0 and is stored at address 0x7ffe9973e600
num[1] has the value 1 and is stored at address 0x7ffe9973e604
num[2] has the value 2 and is stored at address 0x7ffe9973e608
num[3] has the value 3 and is stored at address 0x7ffe9973e60c
num[4] has the value 4 and is stored at address 0x7ffe9973e610
所以据我所知,C 编译器为 num[0]
选择一个内存位置,然后每个后续元素都放置在四个地址之外。我知道每个编译器都可能不同并且有不同的行为,但如果这是标准的 - 为什么数组元素似乎存储在四个块中?为什么地址模式不是 0x7ffe9973e600
、...601
、...602
、...603
、...604
?每个元素是否占用多个地址?
内存中的地址代表1个字节的数据。 num
数组是 int
类型,每个数组占用 4 个字节。所以要存储一个元素 num[0]
我们需要占用 4 个字节的内存,并且由于每个字节需要 1 个内存地址,因此它们有 4 个内存地址的间隙。如果它是一个 char
数组,那么您会看到序列 0x7ffe9973e600, ...601, ...602, ...603, ...604 等等。