gpt4 book ai didi

c - Ansi C 通过引用指针传递到指针? (我认为)

转载 作者:行者123 更新时间:2023-11-30 18:05:41 24 4
gpt4 key购买 nike

我有以下功能(对于我糟糕的 Ansi-C 技能或缺乏技能,我深表歉意):

// Stick a PacketNode into a HashTree
void InsertPacket(IPv4 database, int treeIndex, int hash, Packet packet)
{
// Check to see if the HashTree already has a BST for this hash, and
// create one if not.
if ((*database->hashTrees[treeIndex])->bst == NULL)
{
printf("hashTree[%d]->bst is NULL\n", treeIndex);
Tree newTree;
newTree = InitTree();
newTree->key = hash;
(*database->hashTrees[treeIndex])->bst = newTree; //THIS LINE...
}

if ((*database->hashTrees[treeIndex])->bst != NULL)
{
printf("hashTree[%d]->bst is NOT NULL\n", treeIndex);
}

// Insert the PacketNode into the BST
Tree node;
node = InitNode(hash, packet);
TreeInsert((*database->hashTrees[treeIndex])->bst, node); //OR THIS ONE...
InorderTreeWalk((*database->hashTrees[treeIndex])->bst);
}

问题是我想要执行函数 3 中的最后一个 InorderTreeWalk() 函数。 (即我调用 Store(database, packet),它调用 InsertData() 函数,该函数调用上面的 InsertPacket() 函数,并且我想在 Store 之后调用树遍历)在InsertData函数中,我初始化并设置database->hashTree[treeIndex] = &newHashTree,然后调用InsertPacket()来创建一个BST,它是HashTree结构的一部分。

我想存储数百个这样的数据包,然后在循环的 Store(database, packet) 调用之后运行 InorderTreeWalk() 函数。

我不确定我是否提供了足够的信息,但我知道我正在破坏 C 指针。在过去 3 年多的时间里,我主要使用 C# 和 Python 进行编码...“我的所有基础都属于”其他人。

如有任何建议,我们将不胜感激。

PS:数据库是一个具有指针数组的结构体,hashTable[256],用于构造 HashTrees。其中又包含一个 int 和一个二叉搜索树 bst。 BST 以整数为键,并具有结构数据包作为数据。数据包只包含几个字符数组。

最佳答案

我认为额外的间接寻址不会给你带来任何好处,因为每次使用它时你都必须添加 (*...) 。清理它应该会让整个事情更容易阅读(和推理)。

并且遍历函数应该位于链的较高位置,只要它位于您要查找的内容的插入之后即可。

关于c - Ansi C 通过引用指针传递到指针? (我认为),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6182282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com