c++ - C++中的双指针数组

标签 c++ c arrays allocation

我正在阅读一个关于 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/

相关文章:

c++ - 包含 qgis 头文件时出错

c++ - C++ 中的模板代码块?

c - 如何在一个参数中将两个数组传递给一个函数?

python - 为什么 python 2.6 不更新我的 numpy 数组?

c++ - 使用 typedef – 基于类的模板参数 – 在类范围之外

c++ - 在 Debug模式下调用函数时,GDB 崩溃

c - 一种方法会引发段错误,而另一种则不会。有什么不同?

c - 如何反转数组的元素?

JavaScript : Pass-by-reference issues when creating an unknown dimension multi dimensional array function

java - 使用方法引用将 List 类型 <Integer> 转换为 String[] 数组