将树结构数据存储到 C 中的数组中,而无需在函数外部声明该数组

问题描述

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

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

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

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

int index = 0;

inorderTraversal(tree->root,&index);

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

inorderTraversal(tree->root,&0);

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

解决方法

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

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

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

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

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