连初级都算不上的代码小白 2023-04-20 20:49 采纳率: 52.7%
浏览 29
已结题

链表指针作为函数参数的传递


#include<stdio.h>//无头节点 
#include<stdlib.h>
typedef struct List
{
    int val;
    struct List *next;
}list;
void a(list*pst)
{
    pst=pst->next;
}
int main()
{
    list *head,*last,*p;
    head=NULL;
    int i,n;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        p=(list*)malloc(sizeof(struct List));
        scanf("%d",&(p->val));
        if(head==NULL)
        {
            head=p;
            last=head;
        }
        else
        {
            last->next=p;
            last=p;
            last->next=NULL; 
        }
    }
    a(head);
    while(head)
    {
        printf("%d ",head->val);
        head=head->next;
    }
}

创建一个单向链表,把头指针head传递给函数a,a的作用是使头指针指向下一节点,为什么a没起到理想的作用

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2023-04-21 11:09
    关注

    原来函数的写法里,void a(list*pst) 函数形参 *pst 的作用域只在函数体内部,当函数执行完毕,这个指针变量*pst 也就释放销毁了,对主函数里调用的实参没有影响,失去了作用。修改如下,供参考:

    #include<stdio.h>//无头节点 
    #include<stdlib.h>
    typedef struct List
    {
        int val;
        struct List* next;
    }list;
    list* a(list* pst)   //void a(list* pst)  修改
    {
        pst = pst->next;
        return pst;      //修改 
    }
    int main()
    {
        list* head, * last, * p;
        head = NULL;
        int i, n;
        scanf("%d", &n);
        for (i = 0; i < n; i++)
        {
            p = (list*)malloc(sizeof(struct List));
            scanf("%d", &(p->val));
            if (head == NULL)
            {
                head = p;
                last = head;
            }
            else
            {
                last->next = p;
                last = p;
                last->next = NULL;
            }
        }
        //a(head);  //修改
        p = head;   //修改
        while (p)
        {
            printf("%d ", p->val);
            //head = head->next;    //修改
            p = a(p);               //修改
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月29日
  • 已采纳回答 4月21日
  • 创建了问题 4月20日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改