C ++中的双指针数组

妮基·维尔玛

我正在阅读有关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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章