c++ - C++ 程序如何为数组分配内存?(不是动态的)
问题描述
例如,当我们创建一个数组时int arr[2][4];
,它的大小变为 2x4x4 = 32,但如果我们动态执行此操作,它的大小将超过 32。
例如,我写了这段代码:
#include <iostream>
#include <stdlib.h>
using namespace std;
// arr[4][2]
int main(){
int **arr;
arr = (int**)malloc(4*sizeof(int*));
int i;
for(i=0;i<4;i++){
*(arr+i) = (int*)malloc(2*sizeof(int));
}
arr[3][1] = 4;
cout << arr[3][1];
return 0;
}
分配了 8 + 4x8 + 4x2x4 = 72 个字节。这就是为什么我认为该程序正在做不同的事情,我想知道它是如何做到的。
解决方案
您在这里所做的并不完全是一个 2D 数组,尽管它在语法上表现得像一个数组。相反,您拥有的是一个指针数组,每个指针都指向一个int
.
如果你想分配一个实际的二维数组,你可以这样做:
int (*arr)[2] = malloc(4 * sizeof *arr);
推荐阅读
- windows - Lua 5.4 源代码包含在 c++Builder 10.1 中不太正确
- javascript - Javascript 承诺 + useState + firebase onSnapshot
- javascript - 在 Redux 中分派多个 reducer 和 case 是一个好习惯吗?
- android - 如何将不同的主题应用于单一活动方法
- apache-spark - Spark 流式传输是否需要 HDFS 和 Kafka
- tiled - 如何在对象层中插入多个图块?
- javascript - 使用 matchMedia,调整窗口大小以修复响应式浏览边缘情况
- python - 虽然猜谜游戏中的函数不断循环,python
- spring-boot - Spring-Boot 2.3.1 -Dspring-boot.run.arguments 不起作用
- react-native - 用不透明度反应原生图像背景,而不是文本