c ++中的双指针数组

时间:2016-04-21 09:00:15

标签: c++ c arrays allocation

我正在阅读关于BTree的节目,在那里我遇到了这个:BTreeNode **C。我知道它是一个二维数组,但它被初始化为C=new BTreeNode *[2*t];。我无法理解这个:这是一个带有动态行和2t列的二维数组吗? 感谢。

3 个答案:

答案 0 :(得分:2)

您可能知道double*是指向double元素的指针。同样,double**是指向double*元素的指针,它本身就是一个指针。同样,double***是指向double**元素的指针,依此类推。

当您将数组实例化为T类型时,通常会new T [size];。例如,对于double的数组,您可以编写new double[size];。如果你的类型T本身就是一个指针,它就完全一样了:你写new double*[size];,然后得到一个指针数组。

在您的情况下,BTreeNode*是指向BTreeNode的指针,而BTreeNode**是指向BTreeNode*的指针,BTreeNode是指向new BTreeNode*[size];的指针。当您通过执行BTreeNode实例化时,您会获得一系列指向int num_rows = 10; int num_cols = 20; BTreeNode** C = new BTreeNode*[num_rows]; for(int i = 0; i < num_rows; i++) { // Then, the type of C[i] is BTreeNode* // It's a pointer to an element of type BTreeNode // This pointer not allocated yet, you have now to allocate it C[i] = new BTreeNode [num_cols]; } 元素的指针。

但实际上,在此步骤中您没有2D数组,因为未分配新分配数组中的指针。通常的方法是以下示例:

for(int i = 0; i < num_rows; i++)
  delete [] C[i];
delete [] C;

使用后别忘了删除内存。通常的做法如下:

mixin

答案 1 :(得分:0)

语句C=new BTreeNode *[2*t];为类型为2*t的{​​{1}}个实例分配空间,因此返回指向此类实例的第一个元素的类型BTreeNode *。这是数组的第一个维度,但是没有为第二个维度分配内存。

答案 2 :(得分:0)

是。如果数组被索引为列主要顺序(因此C [3] [4]是第4列的第5个元素),那么C可能会有不规则(不同大小)的列。

查找为每列分配内存的代码,即

-rw-r--r--. 1 root root 120 abr 10 09:18 /etc/httpd/conf.modules.d/10-subversion.conf

在i上的循环中,表示2D数组的每列长度相同。