【发布时间】:2018-02-09 10:54:18
【问题描述】:
我正在使用在此处找到的以下代码来开始我的涉及树数据结构的项目。
struct node{
int ID;
struct node* next;
struct node* child;
};
typedef struct node node;
node* new_node(int);
node* add_sibling(node*, int);
node* add_child(node*, int);
int main()
{
int i;
node *root = new_node(0);
for (i = 1; i <= 3; i++)
add_child(root, i);
}
node * new_node(int ID)
{
node* new_node =(node*) malloc(sizeof(node));
if (new_node) {
new_node->next = NULL;
new_node->child = NULL;
new_node->ID = ID;
}
return new_node;
}
node* add_sibling(node* n, int ID)
{
if (n == NULL)
return NULL;
while (n->next)
n = n->next;
return (n->next = new_node(ID));
}
node* add_child(node* n, int ID)
{
if (n == NULL)
return NULL;
if (n->child)
return add_sibling(n->child, ID);
else
return (n->child = new_node(ID));
}
我是 C/C++ 和一般编程的初学者。我想我了解除了 add_child 函数之外的所有代码。该函数似乎返回一个指向节点的指针,但是当它在 main 中调用时,它似乎被调用,就好像它是一个 void 函数。我本来想用这种方式调用函数
*root = add_child(root,i);
就像 new_node 的调用方式,或者将 add_child 编写为 void 函数,但是这两种修改都会导致错误(更不用说我发现代码中的实现 确实 工作)。我错过了什么?
【问题讨论】:
-
你可以调用一个返回值的方法,只是不使用返回值。这就是你的主要工作。
-
你认为作者这样写有什么原因吗?
-
因为他根本不需要使用返回值,但在其他情况下可能会有用
-
我明白了,谢谢。我看到我可以将其更改为 void 函数并获得相同的结果(在我不需要返回值的情况下)。