c++ - 了解具有动态内存分配的二维数组

标签 c++ arrays dynamic-memory-allocation

谁能帮我理解这段代码的最后一行?我不明白它是如何动态分配二维数组的。我知道在第 6 行,它创建了一个名为“a”的指针,并将其指向由“c”定义的大小为 5 的整数数组。

我不明白的是“new int”语句是如何与等式中的 r 一起工作的。提前致谢。

#include <iostream>
const int c = 5; //num of columns

 int main () {
   int r = 5;
   int (*a)[c];
   a = new int[r][c]; // allocate array
}

最佳答案

如果你有一个类型 T 并且要分配一个大小为 N 的数组,那么这个表达式

new T[N]

返回分配数组的第一个元素的 T * 类型的地址。

所以你应该写

T *a = new T[N]; 

例如,如果 T 等价于 int 类型

typedef int T;

using T = int;

那么上面的分配就可以写成

int *a = new int[N];

数组元素的大小等于sizeof( int ),通常为4字节。

现在假设您要分配一个类型为 int[M] 的元素数组,其中 M 是一个常量整数表达式。

你可以写

typedef int T[M];

using T = int[M];

T *a = new T[N];

因此您分配了一个包含 N 元素的数组,其中每个元素的大小为 sizeof( int[M] 并且指针 a 指向数组的第一个元素。

因为 T 等价于 tp int [M] 你可以这样写

int ( *a )[M] = new int [N][M]; 

也就是说,这条语句分配了一个 N 元素的数组,类型为 int[M] 并且指针 a 获取了分配数组的第一个元素。

返回到您的程序示例

整数 r = 5 整数 (*a)[c]; a = 新整数[r][c];

你可以改写成下面的方式

typedef int T[c];

using T = int[c];

T *a = new T[r];

也就是说,这个语句分配了一个类型为int[c]r 元素(对象)数组,a 是指向第一个的指针分配数组的元素。

关于c++ - 了解具有动态内存分配的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41266710/

相关文章:

c++ - FFmpeg 1.0 < 导致音频播放问题

JavaScript - 数组 "undefined"错误

javascript - typescript -我在使用函数的返回值时遇到问题

无法为结构分配内存,错误: request for member '****' in something not a structure or union

c - char string[100] 和 char *string = malloc(100) 之间的区别

c - C 中的 realloc — 确切的行为和用途

c++ - Boost 日志自动刷新不适用于文件

C++模板代码顺序解析/CRTP

ios - 在 TableView 中填充数组字典的高效且干净的方法

c++ - 八叉树实现的速度问题