C 指针困难。。。什么';这些片段之间的区别是什么?

C 指针困难。。。什么';这些片段之间的区别是什么?,c,pointers,C,Pointers,希望这个例子能帮助其他任何一个在指针上有困难的人 请在这里给我指出正确的方向-我不确定这两段代码为何表现不同。选项1工作正常,没有任何内存泄漏,但选项2失去了对其他trie节点的引用。然而,看着它们,我似乎无法分辨出它们的不同之处 代码如下: add_word将节点添加到trie数据结构中。 创建一个新节点并返回指向该节点的指针 void add_word(trie_node **node, char *word, int i) { // Option 1 trie_node *

希望这个例子能帮助其他任何一个在指针上有困难的人

请在这里给我指出正确的方向-我不确定这两段代码为何表现不同。选项1工作正常,没有任何内存泄漏,但选项2失去了对其他trie节点的引用。然而,看着它们,我似乎无法分辨出它们的不同之处

代码如下:

add_word将节点添加到trie数据结构中。 创建一个新节点并返回指向该节点的指针

void add_word(trie_node **node, char *word, int i)
{
    // Option 1
    trie_node *new_node;

    if ((*node)->branches[(int) word[i]] == NULL) {
        (*node)->branches[(int) word[i]] = create_trie();

    }

    new_node = (*node)->branches[(int) word[i]];

    if (word[i + 1] == '\0') {
        new_node->end_of_word = 1;
    } else {
        i++;
        add_word(&new_node, word, i);
    }

    // Option 2
    trie_node *new_node = (*node)->branches[(int) word[i]];

    if (new_node == NULL) {
        new_node = create_trie();

    }

    if (word[i + 1] == '\0') {
        new_node->end_of_word = 1;
    } else {
        i++;
        add_word(&new_node, word, i);
    }

}

显然,不同之处在于,在选项1中,您将新创建的trie分配给
(*node)->分支[(int)word[i]]
,而在选项2中,您仅将其分配给
新节点
,这是一个临时变量,因此您将丢失对它的引用。我真的看不出这对其他人有什么用处。
new_node=create_trie()
new_节点
create_trie()覆盖并且不再指向
(*节点)->分支[(int)单词[i]。现在完全有意义了。。。谢谢@CodyGray谢谢@BLUEPIXY!