我正在阅读一个关于 BTree 的程序,在那里我遇到了这个:BTreeNode **C
。我知道它是一个二维数组,但它被初始化为 C=new BTreeNode *[2*t];
。我无法理解:这是一个具有动态行和 2t 列的二维数组吗?
谢谢。
最佳答案
您可能很清楚 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];
}
不要忘记在使用后删除你的内存。通常的做法如下:
for(int i = 0; i < num_rows; i++)
delete [] C[i];
delete [] C;
关于c++ - C++中的双指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36764695/