【问题标题】:Store tree structured data to an array in C without declaring the array outside of the function将树结构数据存储到 C 中的数组中,而无需在函数外部声明数组
【发布时间】:2021-06-27 11:12:21
【问题描述】:

我正在尝试使用中序横向编写代码来横向树结构数据并将所有树节点存储到一个数组中。

void inorderTraversal(AVLTreeNode *node, AVLTreeNode *nodesArray[], int *index)
{
    if (node == NULL)
        return;

    inorderTraversal(node->left, nodesArray, index);
    nodesArray[*index] = node;
    (*index)++;
    inorderTraversal(node->right, nodesArray, index);
}

如果我在主函数中首先声明index,如下所示

int index = 0;

inorderTraversal(tree->root, nodesArray, &index);

但如果我只是在下面这样做,它就行不通了。

inorderTraversal(tree->root, nodesArray, &0);

我怎么能只使用0 传递给函数而不首先在主函数中声明它?

【问题讨论】:

  • 如果不使用变量,index要存放在哪里?
  • 有没有办法在inorderTraversal函数中包含变量?

标签: c pointers data-structures tree


【解决方案1】:

&0 没有意义,因为& 运算符用于获取对象的地址。整数文字不是对象,因此没有地址。

如果你不打算在函数完成后使用index 的值,你可以传递一个复合文字的地址

inorderTraversal(tree->root, nodesArray, &(int){0});

这会创建一个临时对象,其地址可以被获取,并且在使用它的语句之后不再存在。

不过,我认为您想要保留此值,以便知道在inorderTraversal 完成后nodesArray 中有多少值。

【讨论】:

  • 这正是我想要的答案,创建一个临时对象,并且一旦函数完成它就不会占用更多的内存空间。但我喜欢你的建议,即保持快速健全检查的价值!谢谢
  • 我还可以问一下,如果将临时对象传递给函数是编写 C 代码的良好做法吗?
猜你喜欢
  • 2021-06-27
  • 1970-01-01
  • 2018-05-13
  • 2021-06-26
  • 1970-01-01
  • 2021-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多