C++ 动态数组是否在内存中连续分配?

C++ 动态数组是否在内存中连续分配?,c++,arrays,memory,heap,C++,Arrays,Memory,Heap,int*arr=新的int[5] arr指向的数组值是否在堆中连续分配 谢谢。动态数组的正确语法是int*arr=new int[5];。是的,它将被连续分配 这不是使用阵列的推荐方法。如果您在编译时知道数组大小,并且它不是太大,则将其设置为本地:int arr[5];或std::array arr;。否则,请使用std::vector arr5;。现代C++中很少使用新的. 编辑: 真正的多维动态数组是这样分配的 int (*arr2)[6] = new int[5][6]; int (*ar

int*arr=新的int[5]

arr指向的数组值是否在堆中连续分配


谢谢。

动态数组的正确语法是int*arr=new int[5];。是的,它将被连续分配

这不是使用阵列的推荐方法。如果您在编译时知道数组大小,并且它不是太大,则将其设置为本地:int arr[5];或std::array arr;。否则,请使用std::vector arr5;。现代C++中很少使用新的.</P> 编辑: 真正的多维动态数组是这样分配的

int (*arr2)[6] = new int[5][6];
int (*arr3)[6][7] = new int[5][6][7];
它们也是相邻的。 但如果使用指针的1D数组并为每个指针分配动态数组:

int** arrp = new int*[5];
for(int i=0; i<5; i++)
    arrp[i] = new int[6]; 

int*arr=int[5]不正确-您遗漏了关键字new。数组的元素在内存中是连续的。除此之外,这就是指针算法工作的原因。堆是一个过时的术语,它指的是一个特定的内存模型——并非所有实现都需要使用它。如果它不是连续的,它怎么可能工作呢?您必须能够对其进行索引、执行指针算法等。具有动态存储持续时间的对象不一定在堆上分配。实际上它们可能是,但这不是语言的要求。@Barmar即使是多维数组,它也会是一样的吗?我在想,也许一个级别是连续的,但每个级别可能不与另一个级别相邻。即使它是多维数组,它也会是相同的吗?我想也许一个级别是连续的,但每个级别可能不连续。是的,如果它确实是多维数组而不是指针数组。很抱歉,只是澄清一下,您的意思是多维动态数组实际上也连续存储在内存中,所有单个分配都是连续的,否则指针算法将中断。我猜想,当您考虑分配指针,然后分配块来分配给每个指针时,会出现混淆。在这种情况下,指针块将是连续的,但没有理由使任何后续分配与它们是单独的分配相邻
arrp[2][3] = 4