| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2528 人关注过本帖, 1 人收藏
标题:请指点一下关于链表和指针的问题
取消只看楼主 加入收藏
y529879803
Rank: 1
等 级:等待验证会员
帖 子:65
专家分:7
注 册:2016-11-10
收藏(1)
 问题点数:0 回复次数:4 
请指点一下关于链表和指针的问题
最近在学链表和指针,还做了学生证管理程序,就是用的链表和指针。其中有很多不理解的,希望可以知道原因。。。
one *addrecord(one *p)        /* 输入一组记录,添加到链表中     *p是一开始定义的一个空指针 */
{
    one head, *q;           /*head是一个one结构体,one结构体最后是一个*next指针,*q是这个自定义函数声明的一个指针*/
   
    head.next = p;          /*p移动到head这个one结构体的最后那个*next指针的位置*/
    p = &head;              /*将head的地址赋给指针*p          为什么,为什么p先要指向head那个结构体的末尾的那个指针,/*之后又要指向head的地址?为什么要这样做,这样做的意义在于?我试着把这一句和上面一句改了一下直接写p=&head或者*p=head都是可以编译可以构建但是运行就报错,这又是为啥?*/
    while (p->next!=NULL)        /* 将当前指针移动到链表尾端 */
        p = p->next;            /*这一句似乎又产生了一个one结构体,因为p指针在链表尾端又向后移动了一个next指针*/
   
    while(1) {
        char text[80];
        
        q = (one *)malloc(sizeof(one));       /*请求分配一个one结构体的内存*/
        if (q==NULL)
            return head.next;                 /*分配不了就回头指针(是head这个one结构体的最后那个next指针。。。为什么是返回这里?刚才不是把head的地址赋值给p了吗,为什么不返回head而是返回head.next?*/
        q->next = NULL;                       
        printf("\n\n输入姓名   学号   班级   (用空格分隔): ");
        gets(text);                                /* 读取一行文本 */
        if (text[0]=='\0')     break;                /* 空行为结束标志 */
        sscanf(text, "%s%s%s", q->name,q->no,q->classes);    /* 分解名称和电话号码 */
        p->next = q;            /* 在链表尾端添加结点 */
        p = q;                    /* 更新当前指针 这是请求成功之后的操作,大概能懂,不直接写p是因为当初用q才能请求分配内存。。。应该是这样*/
    }
   
    return head.next;             /*分配不了就回头指针(是head这个one结构体的最后那个next指针。。。*/
}




void display (one *p)          /* 显示所有记录信息 */
{
    printf("\n姓名\t\t学号\t\t班级\n");
    for (; p!=NULL; p=p->next)
        printf("%-10s\t%-10s\t%-10s\n", p->name, p->no,p->classes);
    printf("\n");
}

这个比上一个好懂多了,不为空指针就显示。。。而且也不需要在加一个one结构体head,为什么呢,我是说为什么刚才链表添加数据需要加一个head结构体呢。。。
啥都不会好苦恼啊。。。。。。
搜索更多相关主题的帖子: 管理程序 学生证 结构体 记录 
2016-12-12 14:11
y529879803
Rank: 1
等 级:等待验证会员
帖 子:65
专家分:7
注 册:2016-11-10
收藏
得分:0 
那啥,我把问题都写注释里了。。。求解惑。。。。。。!

碧蓝航线真好玩
2016-12-12 14:11
y529879803
Rank: 1
等 级:等待验证会员
帖 子:65
专家分:7
注 册:2016-11-10
收藏
得分:0 
回复 4楼 shasheng
走向我大概知道,我不知道为什么要那样走。。。

碧蓝航线真好玩
2016-12-12 23:01
y529879803
Rank: 1
等 级:等待验证会员
帖 子:65
专家分:7
注 册:2016-11-10
收藏
得分:0 
回复 6楼 九转星河
是这样,p才是一开始定义的一个空指针,为什么要在前面在放一个head的one结构体?head不是指针是一个one结构体。

碧蓝航线真好玩
2016-12-13 06:39
y529879803
Rank: 1
等 级:等待验证会员
帖 子:65
专家分:7
注 册:2016-11-10
收藏
得分:0 
哦,这样我就稍微清楚点了,感谢dalao!!

[此贴子已经被作者于2016-12-13 18:51编辑过]


碧蓝航线真好玩
2016-12-13 18:18
快速回复:请指点一下关于链表和指针的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017473 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved