动态数组是否在内存中连续分配?
Are dynamic arrays allocated contiguously in memory?
int* arr = new int[5];
arr
指向的数组的值是否在堆中连续分配?
谢谢。
动态数组的正确语法是int* arr = new int[5];
。是的,会连续分配。
这不是使用数组的推荐方式。如果您在编译时知道数组大小并且它不是太大,请将其设为本地:int arr[5];
或 std::array<int,5> arr;
。否则,使用 std::vector<int> arr(5);
。 new
在现代 C++ 中应该很少使用了。
编辑:
真正的 multi-dimensional 动态数组分配如下
int (*arr2)[6] = new int[5][6];
int (*arr3)[6][7] = new int[5][6][7];
也是连续的。
但是,如果您使用一维指针数组并将动态数组分配给每个指针:
int** arrp = new int*[5];
for(int i=0; i<5; i++)
arrp[i] = new int[6];
那么 arrp
中的数据不是连续的,即使您可以像 arr2
一样使用它,例如:
arrp[2][3] = 4
int* arr = new int[5];
arr
指向的数组的值是否在堆中连续分配?
谢谢。
动态数组的正确语法是int* arr = new int[5];
。是的,会连续分配。
这不是使用数组的推荐方式。如果您在编译时知道数组大小并且它不是太大,请将其设为本地:int arr[5];
或 std::array<int,5> arr;
。否则,使用 std::vector<int> arr(5);
。 new
在现代 C++ 中应该很少使用了。
编辑: 真正的 multi-dimensional 动态数组分配如下
int (*arr2)[6] = new int[5][6];
int (*arr3)[6][7] = new int[5][6][7];
也是连续的。 但是,如果您使用一维指针数组并将动态数组分配给每个指针:
int** arrp = new int*[5];
for(int i=0; i<5; i++)
arrp[i] = new int[6];
那么 arrp
中的数据不是连续的,即使您可以像 arr2
一样使用它,例如:
arrp[2][3] = 4