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

关于链表的数据结构

关于链表的数据结构

慕姐6162487 2018-10-08 21:21:27
虽然写过不少数据结构的东西。但是感觉对于定义的理解还是不够深刻。。有几个问题这里的。LNode是一个节点的结构体定义吧。。那么linklist是什么呢?。后面在创建一个链表时。为什么malloc的东西格式是linklist呢?一个节点的结构体定义不是LNode吗?。随口一问。。。为啥非要用molloc呢。。直接 * LNODE P =S->NEXT.这样的表达是不行的吗。。就像int i = 5;这样感觉对于定义还是理解的不够。跪求指点。
查看完整描述

2 回答

已采纳
?
雪落无痕ol

TA贡献13条经验 获得超2个赞

这里涉及到两个概念:

  1. typedef的作用,从第一张图中可以看到,typedef会将struct LNode{}和struct Node{}* 分别定义为LNode和LinkList,所以可以看出,类型LinkList == LNode*

  2. 第二张图中,malloc函数返回值为sizeof(LNode)大小空间所在的首地址,类型为void*,这里因为需要将其作为一个LNode来使用,因此将首地址类型转换为LNode*

  3. 对于作者在最后的随口一问,其实要回答明白并不能随口一说,这里涉及到空间分配问题,malloc会向计算机申请一段空间来使用,如若不做申请,那随手申请的指针会变为野指针,使得程序不可控

  4. 对于LNode *P = s->next;这句话本身并没有语法错误,但是首先s在这里是个野指针,这样会使得 P也指向了一个未知的空间中,使程序走向编的未知和不可控,而且根据具体的程序需求,这样做也是不合理的

查看完整回答
反对 回复 2018-10-18
  • 慕姐6162487
    慕姐6162487
    谢谢谢谢。回答的好详细
  • 雪落无痕ol
    雪落无痕ol
    如果想把C语言学习的更好的话,建议阅读一本书籍《深入理解计算机操作系统》,感感觉英语水平可以的话,可以去MCU上看这本书的两个作者的课程,讲的非常好
  • 2 回答
  • 0 关注
  • 821 浏览
慕课专栏
更多

添加回答

举报

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