【发布时间】:2019-05-12 21:02:16
【问题描述】:
我有以下递归函数,它应该调用自己通过引用传递指针。
如何取消引用 tmproot->left 和 tmproot->right 以便将其传递给 tree_input()?
typedef struct node_s {
int value;
struct node_s *left;
struct node_s *right;
} node_t;
node_t new_node() {
node_t *new_node = (node_t*)malloc(sizeof(node_t));
new_node->left = NULL;
new_node->right = NULL;
return *new_node;
}
void tree_input(int value, node_t **tmproot)
{
if (*tmproot == nullptr) {
node_t *node = &new_node();
node->value = value;
}
else if (value < (*tmproot)->value) {
tree_input(value, tmproot->left);
}
else if (value >= value) {
tree_input(value, tmproot->right);
}
return;
}
tree_input() 第一次使用tree_input(new_value, &root); 调用
我确定我错过了一个简单的技巧。
【问题讨论】:
-
@Frank 纯 C 代码在 C++ 中编译
-
@nicomp C++ 的答案包括:“看在上帝的份上,不要为此使用
malloc()”,C 的答案完全不同,所以区别很重要,我认为这是比其他问题更有可能是一个错误标记的问题。 -
@nicomp 不,纯 C 代码中的很多东西不会编译为 C++。仍然有一个“公共子集”可用于编写有效且在两种语言中具有几乎相同含义的代码,但它排除了许多 C 功能。
-
为了进一步详细说明@aschepler 所说的,上面的行
(node_t*)malloc(sizeof(node_t));在C++ 中是未定义的行为,因为它会导致严格的别名冲突(除非它后面跟着一个就地新的)。跨度> -
不要强制转换malloc的返回值:stackoverflow.com/questions/605845/…
标签: c pointers reference double-pointer