Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 静态分配数组的内存分配是否总是按地址值顺序进行的?_C++_Arrays_Memory Management - Fatal编程技术网

C++ 静态分配数组的内存分配是否总是按地址值顺序进行的?

C++ 静态分配数组的内存分配是否总是按地址值顺序进行的?,c++,arrays,memory-management,C++,Arrays,Memory Management,当我们在堆栈上创建一个数组时,比如说intarr[20],是否保证阵列的每个单元在内存中间隔4字节?或者可能发生某些单元没有按顺序分配的情况?保证数组存储在连续内存中。指针算术的定义方式如下: &arr[i] + 1 == &arr[i + 1] 是的,所有数组元素必须是连续的。可以保证数组中的每个int将位于数组中前一个int字节之后sizeof(int)字节。在标准(§7.6.1.1下标)中,这表示为“表达式E1[E2]与*((E1)相同(根据定义)+(E2))”(你的答案

当我们在堆栈上创建一个数组时,比如说
intarr[20],是否保证阵列的每个单元在内存中间隔4字节?或者可能发生某些单元没有按顺序分配的情况?

保证数组存储在连续内存中。指针算术的定义方式如下:

&arr[i] + 1 == &arr[i + 1]

是的,所有数组元素必须是连续的。可以保证数组中的每个
int
将位于数组中前一个
int
字节之后
sizeof(int)
字节。在标准(
§7.6.1.1下标
)中,这表示为“表达式
E1[E2]
*((E1)相同(根据定义)+(E2))
”(你的答案是正确的,只是想添加引用)那么,这个算法也适用于动态分配的数组吗?@Ayush是的,它适用。另外,如果我是正确的,如果他们没有维护序列,他们将不得不保存额外的信息来提取离开的单元格,而他们不这样做。因此他们“必须”保持连续。