c++ - 动态数组是否在内存中连续分配?
问题描述
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++ 中应该很少使用。
编辑:像这样分配的真正的多维动态数组
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];
那么数据 inarrp
不是连续的,即使您可以像使用它一样使用它arr2
,例如:
arrp[2][3] = 4
推荐阅读
- angular - Angular(ngx 图表)传递可选输入
- c++ - 如何正确定义 C++ 类析构函数并将其链接到主文件?
- computer-science - 在计算机科学中,是否存在所有数据表示均相等这一事实的说法?
- sas - SAS 中的 IF THEN 语句
- gnuplot - 使用 gnuplot 中的文本列作为绘图的参数
- javascript - 无法从 fetch 中获取数据
- python - 无法使用 Scrapy 抓取德国网站
- ios - Mac Catalyst 滑动删除在 Mac 上不起作用
- android - Android - 向 MutableLiveData 添加新项目并观察
- ansible - 如何使用 ansible 模块 ios_l2_interfaces 循环遍历 ios 事实?