为了账号安全,请及时绑定邮箱和手机立即绑定

学习c语言的一个疑问

学习c语言的一个疑问

C C# C++
不会说话的鱼 2017-11-28 21:40:58
这是慕课网上边的c语言结构体里面的课程,为什么第19行将p2->next 的指正指向了p1的地址,随后又初始化p2,这样不是直接吧p2->next的地址就不指向p1了不是么,求大神解答!
查看完整描述

1 回答

?
kevinZee

TA贡献50条经验 获得超39个赞

他把p1p2换来换去看上去确实有点难理解。

他的意思其实就是创建一个链表,利用一个变量来缓存和不断更新尾节点的指针

我在你这个函数的基础上简单调整了一下,可能更便于你的理解

struct weapon * create(){

    struct weapon * head = NULL;
    struct weapon * tail = (weapon *) malloc(sizeof(struct weapon));
    scanf("%d %d",&(tail->price),&(tail->atk));
    int n = 0;
    while(tail->price != 0){
        n++;
        if(n == 1){
            head = tail;
        }else{
            //创建一个新的节点
            struct weapon * new_tail = (weapon *) malloc(sizeof(struct weapon));
            scanf("%d %d",&(new_tail->price),&(new_tail->atk));
            new_tail->next = NULL;
            //将这个新节点和当前的尾节点相连
            tail->next = new_tail;
            //更新尾节点指针
            tail = new_tail;
        }
    }

    return head;
}


查看完整回答
1 反对 回复 2017-11-29
  • 不会说话的鱼
    不会说话的鱼
    我不明白的是tail->next=new_tail;tail = new_tail;他先设置了tail结构里面的next指针,然后又给tail进行一个初始化,这么一来的话tail->next这个设置不是被覆盖了吗?
  • kevinZee
    kevinZee
    tail是指针变量,是存放地址的,假设现在tail的值从1000H变为1010H,改变的是指针的指向,而不会改变1000H这个地址内的数据
  • 不会说话的鱼
    不会说话的鱼
    对的啊,但是现在tail->next=new_tail;tail = new_tail;里面tail->next的指向先设置成了new_tail;然后由tail=new_tail;这样子不就是初始化了tail->next=new_tail->next了么,那这么以来链表的话就不能呼应了啊?
  • 1 回答
  • 0 关注
  • 1382 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信