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 ...
随机推荐
- LESS 拓展选择器extend基础用法说明
扩展选择器是less的伪类选择器,他会复制当前选择器,定义新的样式,而原来的不变 nav ul { &:extend(.inline); background: blue; } .inline ...
- ORA-00031: session marked for kill 处理Oracle中杀不掉的锁
一些ORACLE中的进程被杀掉后,状态被置为"killed",但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库.现在提供一种方法解决这种问题,那就是在ORACLE中杀不 ...
- CICS中设置程序常驻内存
CICS中设置程序常驻内存 Permanent=no 修改为Permanent=yse --------------------- 对CICS的参数进行调节,RD中
- 开发iOS应用程序需要的工具和编程技术
似乎每个iOS应用开发学习者都是从这篇文章开始写博客的,我也不例外,也从这里写吧,内容雷同,但绝对是原创.因为一直相信,通过自己的理解写出来,是掌握技术一个很好的途径. Xcode苹果最为优秀的集成开 ...
- LTE参考资料
NETMANIAS TECHNICAL DOCUMENTS: http://www.netmanias.com/en/?m=board&id=techdocs
- -webkit-filter属性用来干什么
这两天有看到国外网站纷纷介绍-webkit-filter,开始很迷惑,丫是想要学IE吗?今天看了下,和IE的滤镜没一毛关系啊,而且,效果很赞! 这些滤镜效果最初是用于SVG的,W3C引入到CSS中,然 ...
- CentOS 6.X版本升级PHP
#-----------------------------CentOS 6.X版本升级PHP------------------#! /bin/sh #1.关闭selinuxcp -rp /etc/ ...
- jMeter 监控cpu、内存
http://jmeter-plugins.org/downloads/all/ 将JMeterPlugins.jar包复制到Jmeter的lib目录下面的ext目录下面,重新启动Jmeter,我们点 ...
- 通过messenger实现activity与service的相互通信
布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:to ...
- 9)Java内部类(Inner Class)
内部类:不可以有静态数据,静态方法或者又一个静态内部类 内部类的优点:隐藏类的细节,内部类可以声明为私有.内部类可以访问外部类的对象(包括private) 静态内部类:可以有静态数据,静 ...