如何在二维数组中分配动态内存?
How is dynamic memory allocated in two dimensional array?
试图了解堆中的分配内存但感到困惑
他们有什么区别:
int** p=new int*[n];
vs
int*p=new int[n];
2) 第一行代码 int** p=new int*[n] 这让很多人感到困惑 int*[n] return 和 new int*[n] return.
可以使用单个指针在 C 中动态分配二维数组。这意味着大小为 rowcolumndataTypeSize 的内存块是使用 malloc 分配的,指针算法可用于访问矩阵元素。
第二行代码分配了一个n
大小的int数组,没问题。
第一行没有分配二维数组。它只是分配一个指针数组。 If 可用于模拟具有 数组指针的二维数组 :
int **p = new int*[n];
for (int i=0; i<n; i++) {
p[i] = new int[m];
}
它看起来像一个大小为 n*m 的二维数组,从某种意义上说,您可以使用 p[i][j]
,只是行不连续。
但请记住:在使用 C++ 编码时,始终首选标准容器而不是手动分配。
区别如代码所示
int* p = new int[n];
分配 int
,但
int** p = new int*[n];
分配 int*
.
您可以分配任何东西(或多或少)。如果你分配 T
那么你得到的是指向 T
的指针,即 T*
.
但是指针没有什么特别的,它们也可以被分配。因此,如果您分配 T*
(指向 T
的指针),那么您返回的是指向 T
(即 T**
)的指针。
分配指针是分配二维数组的第一步。二维数组只是一维数组的数组。指针是二维数组中的行(如果您愿意),但仍需要分配列。
int** array2d = new int*[num_rows]; // allocate the rows
for (int i = 0; i < num_rows; ++i)
array2d[i] = new int[num_cols]; // allocate the columns for row i
执行此代码后,array2d
是一个具有 num_rows
行和 num_cols
列的动态分配的二维数组。
首先 - 它不是二维数组。它是一个指针数组。
int** p=new int*[n];
那么您需要通过遍历此数组为每一行分配 space。
要创建二维数组,您需要:
int (*x)[n] = new int[n][n];
试图了解堆中的分配内存但感到困惑
他们有什么区别:
int** p=new int*[n];
vs
int*p=new int[n];
2) 第一行代码 int** p=new int*[n] 这让很多人感到困惑 int*[n] return 和 new int*[n] return.
可以使用单个指针在 C 中动态分配二维数组。这意味着大小为 rowcolumndataTypeSize 的内存块是使用 malloc 分配的,指针算法可用于访问矩阵元素。
第二行代码分配了一个n
大小的int数组,没问题。
第一行没有分配二维数组。它只是分配一个指针数组。 If 可用于模拟具有 数组指针的二维数组 :
int **p = new int*[n];
for (int i=0; i<n; i++) {
p[i] = new int[m];
}
它看起来像一个大小为 n*m 的二维数组,从某种意义上说,您可以使用 p[i][j]
,只是行不连续。
但请记住:在使用 C++ 编码时,始终首选标准容器而不是手动分配。
区别如代码所示
int* p = new int[n];
分配 int
,但
int** p = new int*[n];
分配 int*
.
您可以分配任何东西(或多或少)。如果你分配 T
那么你得到的是指向 T
的指针,即 T*
.
但是指针没有什么特别的,它们也可以被分配。因此,如果您分配 T*
(指向 T
的指针),那么您返回的是指向 T
(即 T**
)的指针。
分配指针是分配二维数组的第一步。二维数组只是一维数组的数组。指针是二维数组中的行(如果您愿意),但仍需要分配列。
int** array2d = new int*[num_rows]; // allocate the rows
for (int i = 0; i < num_rows; ++i)
array2d[i] = new int[num_cols]; // allocate the columns for row i
执行此代码后,array2d
是一个具有 num_rows
行和 num_cols
列的动态分配的二维数组。
首先 - 它不是二维数组。它是一个指针数组。
int** p=new int*[n];
那么您需要通过遍历此数组为每一行分配 space。
要创建二维数组,您需要:
int (*x)[n] = new int[n][n];