Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么是;新国际***[10]”;做_C++_Arrays_Memory_Memory Management_New Operator - Fatal编程技术网

C++ 什么是;新国际***[10]”;做

C++ 什么是;新国际***[10]”;做,c++,arrays,memory,memory-management,new-operator,C++,Arrays,Memory,Memory Management,New Operator,我看到了下面的代码,我有点困惑 int**** m_ppppCoder; m_ppppCoder = new int ***[10]; 这是一个动态分配的三维int数组吗?有人能准确地解释它是如何工作的吗 阅读注释后添加:上述声明本身并不是一个完整的3d int数组,而是包含数组创建第一步的声明结构。根据这一点,使用下面的代码,您可以动态创建3d阵列。对吗 m_ppppCoder[0] = new int **[10]; m_ppppCoder[0][0] = new i

我看到了下面的代码,我有点困惑

int****            m_ppppCoder;
m_ppppCoder = new int ***[10];
这是一个动态分配的三维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];
在这种情况下,实际数据是如何在内存ie中顺序排列(分配)的

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

没有

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

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
int****
可能没有很好的实际用途


在这种情况下,实际数据是如何在内存ie中顺序排列(分配)的

像这样:

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]...
这很简单。您已经分配了4个阵列。由于它们是单独的分配,这4个数组中的每一个都是彼此独立的,在免费存储区的某个地方

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


请注意,
m_-ppppCoder[x]
m_-ppppCoder[0][x]
m_-ppppCoder[0][0][x]
是所有x-in的未初始化指针[1,10)。

它表明你应该远离这样的代码。FWIW,代码创建了一个由10个指针组成的数组。每个指针的类型都是
int***
。这可能是一些多维数组的开始,但目前它只是一个指针数组。它做什么呢?如果你有5分钟的时间去做,它会让任何理智的程序员感到眩晕pare,我刚刚为你录制了!@Borgleader这句话也可能是错的。我希望大家能评论一下:)谢谢你的回答!
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
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];
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]...