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