typedef和自定义结构体类型
在自定义结构体类型时会用到typedef关键字.大家都知道typedef是取别名的意思,在C语言中跟它容易混淆的有const,#define等,其区别不在本篇文章讨论之列.

/*定义单链表结点类型*/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就没警告了.
抱歉,我的代码注释太多了.初学者只是为了做笔记,请大家见谅.
文外话:
1.感谢<<C语言必须知道的300个问题>>的作者,本文涉及的问题在该书的第222和223,227(293页)都有详细阐述.读者如有疑问可自己再查阅该书,另外此书有PDF版.
2.本文作者有如下问题,请看到此博客的人帮帮我,在此不慎感激:
- 请问单链表的结点可以是不同类型吗,比如结点1我写73,结点2我写e.
- 请问结点可以是字符串吗,那如何定义呢,貌似C没有字符串类型变量,该用哪种标识符呢.
- (见注释)我想在以后能方面的调用这个单链表,但它只是字符型的,请问怎么定义可以让它想是字符型就是字符想是整型就是整型,注意此问题跟第一个问题不同.
3.博客园这个编辑器我第一次用,这不习惯啊,那个自动保存后边的查看是个坑么,什么恢复内容开始结束的.搞得我文章一开始重复一大块.还有我的代码块怎么有两个复制啊,怎么删除呢.
typedef和自定义结构体类型的更多相关文章
- typedef struct 指针结构体使用方法
A>>>>>>>>>>>>>>>>>>>>>>>> ty ...
- 自定义数据类型 C++ 结构体类型 共同体类型 枚举类型 类类型{}
一.结构体类型 结构体类型,共用体类型,枚举类型,类类型等统称为自定义类型(user-defined-type,UDT). 结构体相当于其他高级语言中的记录(record);例如: struct St ...
- iOS自定义结构体
一.提要 通过以官方的CGSize为例,自定义Objective-C中的结构体,并使用. 二.CGSize 1.系统定义的CGSize结构体 struct CGSize { CGFloat width ...
- C语言中的系统时间结构体类型
在C语言涉及中经常需要定时触发事件,涉及到获取系统时间,其结构体类型有多种.Unix/Linux系统下有以下几种时间结构: 1.time_t 类型:长整型,一般用来表示从1970-01-01 00:0 ...
- Go语言规格说明书 之 结构体类型(Struct types)
go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,介绍Go语言的 ...
- Solidity的自定义结构体深入详解
一.结构体定义 结构体,Solidity中的自定义类型.我们可以使用Solidity的关键字struct来进行自定义.结构体内可以包含字符串,整型等基本数据类型,以及数组,映射,结构体等复杂类型.数组 ...
- 张超超OC基础回顾03_结构体类型作为成员变量的特殊用法
直接上例子: 要求: 合理的设计一个”学生“类 学生有* 姓名* 生日两个属性和说出自己姓名生日方法 要求利用设计的学生类创建学生对象,并说出自己的姓名和年龄 描述学生类 事物名称: 学生(Stud ...
- 让结构体类型frame的某个属性可以直接修改
本篇是是本人在博客园写的第一篇博客,前几天因为种种原因最终决定离开混了几年的csdn.希望在博客园有个新的开始 Foundation框架里面的frame是大家最熟悉不过的一个属性了,但是修改起来比较麻 ...
- 你好,C++(14)如何描述“一个名叫陈良乔,年龄33岁,身高173厘米,体重61.5千克的男人”——3.8 用结构体类型描述复杂的事物
3.8 用结构体类型描述复杂的事物 利用C++本身所提供的基本数据类型所定义的变量,只能表达一些简单的事物.比如我们可以用int类型定义nAge变量表示人的年龄,用string类型定义strName ...
随机推荐
- 4种kill某个用户所有进程的方法
在linux系统管理中,我们有时候需要kill掉某个用户的所有进程,初学者一般先查询出用户的所有pid,然后一条条kill掉,或者写好一个脚本,实际上方法都有现成的,这边有4种方法,我们以kill用户 ...
- facelets标签
facelets标签 <ui:component>标签用于JSF组件树中插入一个uicomponent实例,并作为它包含的的组件和内容片断的根节点,这视图中这个标签以外的的内容被编译器忽略 ...
- 五、Eclipse编写struts.xml没有提示的问题
五.Eclipse编写struts.xml没有提示的问题 原因:找不到约束文件 解决: 联网 手工配 a.eclipse的菜单:window\preferences
- Longest Common Prefix [LeetCode 14]
1- 问题描述 Write a function to find the longest common prefix string amongst an array of strings. 2- 思路 ...
- [原]SQL_实验2.1.3 清华大学出版社
本文出自:http://blog.csdn.net/svitter 实验目标:熟悉实体完整性,参照完整性,事务的处理: /*1.在数据库school表中建立表Stu_uion,进行主键约束,在没有违反 ...
- Winform登录、控制软件只运行一次、回车登录
Winform登录对很多程序猿来说都有些困惑,登录进入主窗体后要销毁登录窗体,而不是隐藏哦,怎么实现呢? 先贴一段Program.cs的代码 static void Main() { Mutex mu ...
- c#中操作word文档-三、MSDN文档
这是关于word读写的MSDN内容,基本所有的方法都可以在这上面找到 https://msdn.microsoft.com/zh-cn/library/office/ff837519.aspx
- WordPress 撰写文章页面显示所有标签
WordPress 撰写文章时,点击"从常用标签中选择"只显示45个常用的标签,很多情况下还需手工再次输入标签,这样的限制感觉很不方便,通过下面的方法可以解除这个限制,显示全部标签 ...
- PHP使用phpexcel读取excel文件
PHP读取excel文件 require("Classes/PHPExcel.php"); require("Classes/PHPExcel/IOFactory.php ...
- Nginx配置:http重定向,URLRewrite,一个简单框架的配置思路
一个重定向的应用配置: server { listen 8000; server_name localhost; root F:/home/projects/test; index ...