VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 755|回复: 7

[求助] 单链表求助

[复制链接]
22_avatar_middle
在线会员 发表于 2016-8-16 10:37:46 | 显示全部楼层 |阅读模式
//定义一个单链表
struct Node
{
        int data;
        Node *next;       
};

int main(int argc, char* argv[])
{
        /*
        //-------------------------------------------------------------测试1---------------------------------------------------------------//
        Node *p=(Node*)malloc(sizeof(Node));
        Node *q=(Node*)malloc(sizeof(Node));
        q->data=1;
        p->next=q;
        */

        //-------------------------------------------------------------测试2---------------------------------------------------------------//
        Node *p=(Node*)malloc(sizeof(Node));
        Node *q=p->next;
        q=(Node *)malloc(sizeof(Node));
        q->data=1;
        return 0;
}
为什么测试2就出问题,对q操作,p链表的next却没变化,求大侠指点




上一篇:安装的VS2015不能单步调试
下一篇:shared_ptr 与 make_shared
51_avatar_middle
online_admins 发表于 2016-8-16 11:33:42 | 显示全部楼层
Node *p=(Node*)malloc(sizeof(Node));
q=(Node *)malloc(sizeof(Node));
q->data=1;
p->next = q;
return 0;

这样就可以了
22_avatar_middle
ico_lz  楼主| 发表于 2016-8-16 17:04:15 | 显示全部楼层
Syc 发表于 2016-8-16 11:33
Node *p=(Node*)malloc(sizeof(Node));
q=(Node *)malloc(sizeof(Node));
q->data=1;

大神,你说的这个是我的测试1啊,但是测试2出问题是什么原因呢?
51_avatar_middle
online_admins 发表于 2016-8-16 20:21:14 | 显示全部楼层
fengdawei 发表于 2016-8-16 17:04
大神,你说的这个是我的测试1啊,但是测试2出问题是什么原因呢?


没有把 q 赋值给 p->next
61_avatar_middle
在线会员 发表于 2016-8-16 21:11:56 | 显示全部楼层
链表这个东西还是多画图吧,不多说,直接上图吧
单链表求助
22_avatar_middle
ico_lz  楼主| 发表于 2016-8-17 11:02:09 | 显示全部楼层
Syc 发表于 2016-8-16 20:21
没有把 q 赋值给 p->next

q是指向p->next的指针啊,直接对q操作,p->next也不就有值了嘛
22_avatar_middle
ico_lz  楼主| 发表于 2016-8-17 11:04:56 | 显示全部楼层
用户已被注册 发表于 2016-8-16 21:11
链表这个东西还是多画图吧,不多说,直接上图吧

大神,我是这样子理解的,不知道对不对,首先对p进行开辟空间,p->data和p->next都分配到了地址,然后q作为p->next的地址,对q进行操作,那么p->next不就跟着有值了嘛
61_avatar_middle
在线会员 发表于 2016-8-17 20:40:12 | 显示全部楼层
你所说的q作为p->nexe的地址是什么意思?是指q = p->next吗?
指针是一个变量,一般使用指针是根据这个变量里面存储的地址值找到对应位置的内存,先对p开辟一块内存空间的话p->next开始不执行任何内存,执行q = p->next后的结果是这样的
单链表求助
这个时候通过q只能操作p->next这块内存,你后面又有给q分配内存的操作,这个时候q的值被malloc函数的返回值给覆盖了,q已经不再指向p->next了,现在的p、q节点没有一点联系了。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-5-24 16:14

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表