我正在阅读有关BTree的程序,在那里遇到了这个:BTreeNode **C
。我知道这是一个2D数组,但它初始化为C=new BTreeNode *[2*t];
。我不明白:这是具有动态行和2t列的2d数组吗?谢谢。
您可能很清楚这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
元素的指针数组。
但是实际上,在此步骤中您没有2D数组,因为没有分配新分配的数组中的指针。下面的示例是实现此目的的常用方法:
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];
}
使用后,请不要忘记删除您的内存。常用的方法如下:
for(int i = 0; i < num_rows; i++)
delete [] C[i];
delete [] C;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句