单链表中结构体指针及指针做参数疑点解惑
来源:互联网 发布:淘宝网上怎么买二手货 编辑:程序博客网 时间:2024/05/17 01:31
大二时数据结构学的迷迷糊糊,很多问题没有深究,书上怎么写我就怎么记,没有思考过一些细节。最近考研复习数据结构遇到不少费解的问题,问题很细,可能很多人都会不小心忽视。
单链表的定义
typedef struct LNode{ Elemtype data; struct LNode *next;}LNode,*LinkList;
首先关于LNode的问题:
为啥要定义两次LNode呢?两次的作用是否相同呢?
答案是不相同!在结构体定义typedef struct A{...}A中,前一个A是结构体标记,后一个A是你定义的一个结构体数据类型。结构体标记没有啥实际作用,其实可以随便取名字,一般用来标记该结构体的某些信息,唯一的用处就是你需要创建一个结构时要会使用到它,比如说
struct A B;//创建一个A这样的结构体,名字叫B
后一个A是你定义的一个结构体数据类型。问题来了,啥叫我定义的一个结构体的一个数据类型?数据类型大家都知道吧,比如说int,double。它们有什么用处?创建它们各自类型的新变量啊,比如说
int a;double b;
同理,现在的A就相当于int,double,我可以直接用它定义一个结构体类型的变量,比如说
A B;//此时B就是一个A类型的结构体了,内含两个成员变量,一个是data,类型是Elemtype(任意数据类型),一个是结构体指针类型的指针 next,
它只能指向同为该结构体类型的某一个节点
在结构体标记很长的时候,直接用结构体类型来创建一个新的结构体变量就会很方便。
但是很多书上把结构体标记跟下面的结构体数据类型写成一样的,就像我上面写的,就会引起很多初学者的误解,以为他们之间必然有什么联系,甚至就应该是相同的。这里我修改掉
typedef struct hello{ Elemtype data; struct LNode *next;}LNode,*LinkList;
关于*LinkList的问题。
指针不得不说是C、C++语言里面最费解的问题之一了。*LinkList定义了一个struct hello类型的指针,意思是说*LinkList是与LNode不同名字但是同一个类型,其实是等价的。LinkList本质上是一个指向该结构体的指针类型。比如说,我定义一个LinkLIst类型的指针p
LinkList p;那么这个p就是指向该结构体的一个指针,也就是所谓单链表中的头指针。
阅读全文
0 0
- 单链表中结构体指针及指针做参数疑点解惑
- typedef struct lnode(结构体及结构体指针)解惑
- 指向结构体类型的指针数组做函数参数
- 【C语言提高37】结构体元素做函数参数与结构指针做函数参数
- 结构体元素做函数参数和结构指针做函数参数
- 指针部分疑点解释
- 细节决定成败(用结构体变量和结构体指针变量的指针做函数参数)
- 结构体、结构指针作为函数参数
- 用结构体变量和结构体变量的指针做参数函数
- oj Problem F: 复杂类型作函数参数之结构体指针做参数
- 指针做函数参数
- 使用指针做参数
- 函数指针做参数
- 指针数组做参数
- 指针变量做参数
- 指针做函数参数
- 函数指针做参数
- 函数指针及结构体
- Zookeeper知识点总结
- 使用 Eclipse Memory Analyzer 进行堆转储文件分析 Eclipse Memory Analyzer(MAT)
- hdu 5878 丑数 STL(pair,priority_queue)
- 微博实习生面试记录
- ArduinoJson报错
- 单链表中结构体指针及指针做参数疑点解惑
- Pat(A) 1101. Quick Sort (25)
- 原生JS实现图片的轮流播放
- http-关于application/x-www-form-urlencoded等字符编码的解释说明
- 源码(八)
- 2012腾讯实习笔试中看到的Catalan数
- 【京东2018秋招前端工程师】编程题-表格操作
- 浅谈使用element ui + vuedraggable + sortablejs实现多种版式布局及托拽(1)
- Mybits+Oracle+List集合(封装Map)批量存储