我正在阅读一个关于 BTree 的程序,在那里我遇到了这个: BTreeNode **C
。我知道它是一个二维数组,但它被初始化为 C=new BTreeNode *[2*t];
。我无法理解:这是一个具有动态行和 2t 列的二维数组吗?谢谢。
原文由 Nikhil Verma 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在阅读一个关于 BTree 的程序,在那里我遇到了这个: BTreeNode **C
。我知道它是一个二维数组,但它被初始化为 C=new BTreeNode *[2*t];
。我无法理解:这是一个具有动态行和 2t 列的二维数组吗?谢谢。
原文由 Nikhil Verma 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
您可能很清楚
double*
是指向double
元素的指针。同样,double**
是指向double*
元素的指针,它本身就是一个指针。同样,double***
是指向double**
元素的指针,依此类推。当您将数组实例
T
类型时,通常会执行new T [size];
。例如,对于double
的数组,您编写new double[size];
。如果您的类型T
本身就是一个指针,那么它完全一样:您编写new double*[size];
,然后您会得到一个指针数组。In your case,
BTreeNode*
is a pointer toBTreeNode
, andBTreeNode**
is a pointer toBTreeNode*
which is a pointer toBTreeNode
。当您通过执行new BTreeNode*[size];
来实例化它时,您会得到一个指向BTreeNode
元素的指针数组。但实际上,在这一步你没有二维数组,因为新分配的数组中的指针没有分配。通常的方法是以下示例:
不要忘记在使用后删除您的内存。通常的方法如下: