我在以下地方看到了以下代码,我有点困惑。
int**** m_ppppCoder;
m_ppppCoder = new int ***[10];
是动态分配的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];
在这种情况下,实际数据如何在内存中(即顺序地)排列(分配)?
答案 0 :(得分:9)
是动态分配的3维int数组吗?
否。
int**** m_ppppCoder
m_ppppCoder
是一个指向整数的指针的指针。
m_ppppCoder = new int * **[10];
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****
可能没有很好的实际用途。
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]...
这很简单。您已经分配了4个阵列。由于它们是单独的分配,因此这四个数组中的每个数组都在免费存储中的某个位置彼此分开。
数组元素本身在内存中是连续的。因此,每个指针(或最后一个指针的整数)在内存中相对于同一数组的其他元素都是连续的。
请注意,m_ppppCoder[x]
,m_ppppCoder[0][x]
和m_ppppCoder[0][0][x]
是[1,10)中所有x的未初始化指针。