Ansi C указатель передачи по ссылке на указатель? (Я думаю)

#c #pointers #struct #pass-by-reference #parameter-passing

#c #указатели #структура #передача по ссылке #передача параметров

Вопрос:

У меня есть следующая функция (и я приношу извинения за мои ужасные навыки 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 NULLn", 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 NULLn", 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 (database, packet), который вызывает функцию InsertData (), которая вызывает функцию InsertPacket () выше, и я хочу вызвать обход дерева сразу после сохранения)
В функции InsertData я инициализирую и устанавливаю database->HashTree[treeIndex] = amp;newHashTree, затем вызываю InsertPacket() для создания BST, который является частью структуры HashTree.

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

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

Любой совет был бы оценен.

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

Комментарии:

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

2. Просто чтобы уточнить: Первый оператор if: если это null, выведите и выделите новый. Второй оператор if (не else?????): если новый, который я только что выделил, не равен NULL (ожидается, что этого не будет), выведите.

Ответ №1:

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

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