typedef 和 自定义结构体类型
2015-07-27 14:14
323 查看
在自定义结构体类型时会用到typedef关键字.大家都知道typedef是取别名的意思,在C语言中跟它容易混淆的有const,#define等,其区别不在本篇文章讨论之列.
//定义此结构体变量struct dNode a或LNode a;定义此结构体的指针struct dNode *p或LNode *p或LinkList p都是没区别的 /*在链表的末端插入新的节点,建立链表*/
注意点:
指针域定义了指向自己所在结构体类型的指针.这部分很容易错写,一种是漏写struct,要记住此时你声明next的时候typedef还没定义呢,哪来的dNode?如果不写struct,不管你是写dNode还是LNode结果都只有一种:后面根本编译不下去,错误一堆!此时还没定义完结构体呢!这也说明不能用LNode *next;总之要在结构体内定义指向自己的指针非得加上struct不可!
对于太多自学的人这条可能很有现实意义了.我相信有不少人会把指针域的dNode还}后的LNode连带最开头的dNode三个搞混.因为很多编程书上都给他们取一样的名字!好吧,如果照书上抄代码还没错.这里把struct dNode{}这部分看成整体,typedef就是给这个整体取别名的,我取的是LNode;与此同时给这个整体的指针取了LinkList作别名.
因此我们就有我在注释里写的2种定义结构体变量和3种定义结构体指针的方式.
指针域那个是dNode不是后面的LNode,很简单后者只是别名,前者是真正的结构体名.如果你把这句写成struct LNode *next编译是能通过的,但是有潜在危机.定义完上述代码后,我又有了如下操作 LinkList p,head; head->next = p; 发现警告 warning C4133: “=”: 从“LinkList”到“LNode *”的类型不兼容!然后我将错写的struct LNode *next改回struct dNode *next就没警告了.
/*定义单链表结点类型*/ typedef char ElemType; typedef struct dNode {//声明单链表结点类型 ElemType data; struct dNode *next; //指针域 }LNode, *LinkList;
//定义此结构体变量struct dNode a或LNode a;定义此结构体的指针struct dNode *p或LNode *p或LinkList p都是没区别的 /*在链表的末端插入新的节点,建立链表*/
注意点:
指针域定义了指向自己所在结构体类型的指针.这部分很容易错写,一种是漏写struct,要记住此时你声明next的时候typedef还没定义呢,哪来的dNode?如果不写struct,不管你是写dNode还是LNode结果都只有一种:后面根本编译不下去,错误一堆!此时还没定义完结构体呢!这也说明不能用LNode *next;总之要在结构体内定义指向自己的指针非得加上struct不可!
对于太多自学的人这条可能很有现实意义了.我相信有不少人会把指针域的dNode还}后的LNode连带最开头的dNode三个搞混.因为很多编程书上都给他们取一样的名字!好吧,如果照书上抄代码还没错.这里把struct dNode{}这部分看成整体,typedef就是给这个整体取别名的,我取的是LNode;与此同时给这个整体的指针取了LinkList作别名.
因此我们就有我在注释里写的2种定义结构体变量和3种定义结构体指针的方式.
指针域那个是dNode不是后面的LNode,很简单后者只是别名,前者是真正的结构体名.如果你把这句写成struct LNode *next编译是能通过的,但是有潜在危机.定义完上述代码后,我又有了如下操作 LinkList p,head; head->next = p; 发现警告 warning C4133: “=”: 从“LinkList”到“LNode *”的类型不兼容!然后我将错写的struct LNode *next改回struct dNode *next就没警告了.
相关文章推荐
- lufylegend库 LGraphics绘制图片
- 一个非常标准的Java连接Oracle数据库的示例代码
- dp记忆化搜索
- 实体关系之@OneToMany
- NSString与CGPoint、CGSize等结构体之间转换的API
- AM335x(TQ335x)学习笔记——Nand&&网卡驱动移植
- jsp中,ajax提交表单用法 分类: ajax 2011-07-29 14:59 3746人阅读 评论(0) 收藏 举报 jspajaxinputbuttonactionfunction 一:
- Console I/O 加上CreateThread
- 蒙特卡罗法(Monte Carlo Methods)
- 大家好,我是一个JAVA初学者,想在这里记下自己学习过程中的点点滴滴,请多多关照
- CORE JAVA study note(CHAPTER THREE)
- 个性化控件(View)篇(1)
- 挂载ubifs文件系统分区
- AM335x(TQ335x)学习笔记——GPIO按键驱动移植
- AM335x(TQ335x)学习笔记——LCD驱动移植
- Android ndk 单步调试
- Android碎片第三期
- ural 1024 PERMUTATIONS
- Android Studio手动导入第三方类库
- 多功能数字时钟