C语言 为什么我看到下面的编译时错误



我正在尝试做一个简单的程序,在链接列表的末尾添加一个节点:

/*Insert Node at the end of a linked list 
  head pointer input could be NULL as well for empty list
Node is defined as 
  struct Node
  {
     int data;
     struct Node *next;
  }
*/
Node* Insert(Node *head,int data)
{
    if(head){
         Node *curr_node=head;
        while(curr_node->next)
            curr_node=curr_node->next;
    }
    Node *new_node=(Node *)calloc(1,sizeof(Node));
    new_node->data=data;
    new_node->next=NULL;
    if(head)
            curr_node->next=new_node;
    else
            head=new_node;
    return head;
}
/* the main function calls it*/
当我编译时,我看到以下错误:

在函数' Node* Insert(Node*, int) '中:解决方案。Cc:59:13:错误:' curr_node '没有在这个作用域中声明下= new_node curr_node ->

为什么它说curr_node没有声明,而实际上它在一开始就声明了。我遗漏了什么?

在函数定义中声明的变量的作用域仅扩展到最内层的{}大括号。因此,您的变量curr_node在第一个if块之后不再有效。

要解决这个问题,在if块之外声明变量:

Node* Insert(Node *head,int data)
{
    Node *curr_node = NULL;
    if(head){
        curr_node=head;
        while(curr_node->next)
            curr_node=curr_node->next;
    }

相关内容

  • 没有找到相关文章

最新更新