"new int***[10]"有什么作用?

Mav*_*ick 3 c++ memory arrays memory-management new-operator

我在下面看到了以下代码,我有点困惑.

int****            m_ppppCoder;
m_ppppCoder = new int ***[10];
Run Code Online (Sandbox Code Playgroud)

这是一个动态分配的3维int数组吗?有人可以准确解释,它是如何工作的?

阅读注释后添加:上面的声明本身不是一个完整的3d int数组,而是具有数组创建第一步的声明结构.根据这一点,使用下面的代码,您可以动态创建一个3d数组.那是对的吗 ?

m_ppppCoder[0] = new int **[10];
m_ppppCoder[0][0] = new int *[10];
m_ppppCoder[0][0][0] = new int[10];
Run Code Online (Sandbox Code Playgroud)

在这种情况下,实际数据如何在存储器内排列(分配),即顺序?

eer*_*ika 9

这是一个动态分配的3维int数组吗?

没有.

int****            m_ppppCoder
Run Code Online (Sandbox Code Playgroud)

m_ppppCoder 是指向指向整数指针的指针的指针.

m_ppppCoder = new int * **[10];
Run Code Online (Sandbox Code Playgroud)

m_ppppCoder 指向动态分配的10个指针数组的第一个元素,该指针指向指向整数的指针.

有人可以准确解释,它是如何工作的?

好吧,它是一个指向数组元素的指针,所以它本身并没有做太多的工作.用法示例:

int i = 42;                 // an integer i
int *ii = &i;               // ii points to i
int **iii = ⅈ            // iii points to ii
m_ppppCoder[0] = &iii;      // the first element points to iii
int j = ****m_ppppCoder[0]; // the value of j is now 42
delete[] m_ppppCoder;       // never forget to delete dynamic memory
Run Code Online (Sandbox Code Playgroud)

可能没有很好的实际用途int****.


m_ppppCoder = new int ***[10];
m_ppppCoder[0] = new int **[10];
m_ppppCoder[0][0] = new int *[10];
m_ppppCoder[0][0][0] = new int[10];
Run Code Online (Sandbox Code Playgroud)

在这种情况下,实际数据如何在存储器内排列(分配),即顺序?

像这样:

pointer to int***     p
                      |
an array of 10 int*** |->[0][1][2][3]...
                          |
an array of 10 int**      |->[0][1][2][3]...
                              |
an array of 10 int*           |-> [0][1][2][3]...
                                   |
an array of 10 int                 |-> [0][1][2][3]...
Run Code Online (Sandbox Code Playgroud)

这很简单.您已分配4个阵列.由于它们是单独的分配,因此这4个阵列中的每一个都在免费存储中的某个位置彼此分开.

数组的元素本身在内存中是连续的.因此,每个指针(或最后一个指针中的整数)在存储器中相对于同一阵列的其他元素是连续的.

请注意m_ppppCoder[x],m_ppppCoder[0][x]并且m_ppppCoder[0][0][x]是[1,10]中所有x的未初始化指针.

  • 10指针到指针指向整数. (3认同)
  • @Quentin我编辑了以符合您的计算. (2认同)