Ansi C мимо-ref-указатель на указатель?(Я думаю) - PullRequest
0 голосов
/ 31 мая 2011

У меня есть следующая функция (и я извиняюсь за свои ужасные навыки 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);
}

Проблема в том, что я хочу выполнить эту последнюю функцию InorderTreeWalk () вфункция 3 уровня вверх.(т.е. я вызываю Store (база данных, пакет), который вызывает функцию InsertData (), которая вызывает функцию InsertPacket () выше, и я хочу вызвать обход дерева сразу после Store). В функции InsertData я инициализирую и устанавливаю> hashTree [treeIndex] = & newHashTree, затем вызовите InsertPacket () для создания BST, который является частью структуры HashTree.

Я хочу сохранить пару сотен этих пакетов, затем runфункция InorderTreeWalk () сразу после зацикленного вызова Store (базы данных, пакета).

Я не уверен, что предоставляю достаточно информации, и я знаю Я убиваю указатели C,Последние 3 с лишним года я программировал в основном на C # и Python ... «Все мои базы принадлежат» кому-то другому.

Любой совет будет оценен.

PS:база данных - это структура, имеющая массив указателей, hashTable [256], для структурирования HashTrees.Которые в свою очередь содержат int и двоичное дерево поиска, bst.BST имеют ключ от целых и имеют структурный пакет в качестве данных.Пакеты просто содержат несколько массивов символов.

1 Ответ

0 голосов
/ 31 мая 2011

Я не думаю, что дополнительная косвенность покупает вам что-нибудь, так как вы должны добавлять (* ...) каждый раз, когда используете его.Очистка этого должна сделать все это более легким для чтения (и рассуждать).

И функция обхода должна быть выше в цепочке, если она после вставкивещь, которую вы хотите найти.

...