在下面的代码片段中,count函数计算创建的链接列表中的节点数。我想知道下一个地址是如何从count(C_list->next);
函数调用传递的?
struct linked_list
{
int number;
struct linked_list *next;
};
typedef struct linked_list node;
main()
{
head = (node*)malloc(sizeof(node));
create(head);
print(head);
c = count(head);
}
int count(node* C_list)
{
if(C_list->next==NULL)
return(0);
else
{
return(1+count(C_list->next));//How does the next address gets passed from this function call?
}
}
答案 0 :(得分:0)
首先,我必须建议你读一本关于C的书,因为看起来你的问题是“显而易见的”。所以这是我书中的一部分:
计算函数调用中的表达式C_list->next
,并将结果作为参数传递给函数。
表达式采用C_list
变量(指针),取消引用它,然后获取next
成员。然后将指向列表下一个节点的next
值作为参数传递给函数。
此功能现在继续下一个节点。
答案 1 :(得分:0)
main()
{
head = (node*)malloc(sizeof(node));
create(head);
print(head);
c = count(head); //See here you are sending the actual node, which is head.
}
int count(node* C_list)
{
if(C_list->next==NULL) //-->Here the if condition is checking for the next node (head->next) whether it is null or not.
return(0); //-->If the next node is null, it means no nodes are there. So returning 0.
else
{
return(1+count(C_list->next));
}
}
现在棘手的部分是返回行,您将C_list->next
即head->next
传递给count函数。现在在递归之后,在上面的if
条件下,它会检查下一个节点地址,即head->next->next
,它会一直持续到节点为null
,这样下一个地址就会通过用于递归函数。希望这可能对你有所帮助。