`
zizhu8
  • 浏览: 62038 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

typedef struct语法解释

 
阅读更多

C语言源代码:


解释说明:

typedef的语法规则其实很简单,一句话来说就是定义对象的语法前加关键字typedef,剩下的不变,原本定义的对象标识符换成类型标识符,对应语义从定义一个对象改成定义一个类型别名。typedef看起来复杂根本原因是对象定义的语法比较复杂,例如分隔符*和[]的用法。
typedef struct node{
datatype data;
struct node *lchild,*rchild;
}bintnode;
对应的对象定义:
struct node{
datatype data;
struct node *lchild,*rchild;
}bintnode;
去除bintnode来看就是一个类型struct node的完整描述。加上了bintnode来看,表示定义了一个struct node类型的对象bintnode。
现在前面有typedef,因此这个bintnode不是对象名而是类型名。也就是定义了一个类型别名bitnode,实际上指的就是struct node这个完整类型。
typedef定义的类型别名在作用域内和被定义的原类型语义上等价,都是表示同一个类型的名称。这里typedef之后bitnode可以和struct node互相代替(注意在C++中,如果同一命名空间内类型名和对象名没有重复,那么struct可以省略,struct node等价于node)。
更复杂一点的:
struct node{
datatype data;
struct node *lchild,*rchild;
}bintnode, *bintree;
注意定义对象时*修饰对象本身而不是修饰类型。因此这里定义了struct node对象bintnode和struct node*类型的对象bintree。
对应的类型定义:
struct node{
datatype data;
struct node *lchild,*rchild;
}bintnode, *bintree;
这里定义了类型别名bintnode表示完整类型struct node,以及bintree表示类型struct node*。
拆开来就成了
typedef struct node{
datatype data;
struct node *lchild,*rchild;
}bintnode;

typedef bintnode *bintree;
这种写法看起来应该稍微清楚了一点。
至于下面的cirqueue,和上面的bintnode类似,只是这里省略了结构体名称,是一个匿名类型。这样写的主要好处是类型名可以省略struct(C++里面不这样写也可以省略)。


分享到:
评论

相关推荐

    C/C++语法知识:typedef struct 用法详解

    主要讲述c/c++中struct和typedef struct的区别以及各种用法

    编译原理实践中间代码生成代码(c++)

    typedef struct WordAnalysisList { struct WordAnalysisList *last; char index;//以字母作为标号 其index为在endSign中对应的元素 char value[128];//对应值字符串 struct WordAnalysisList *next; }...

    vs code C/C++语法高亮配置文件(C/C++ Themes插件)

    可以对诸如const、enum、typedef别名、结构体引用等语法高亮进行设置,语言本身的关键字自然不用说了,比one dark pro等热门的插件颜色丰富的多。 根据自己喜好对c常用语法颜色进了仔细设置,并加有注释。

    编译原理实验语法生成器

    typedef struct DisplayTable { int Index; //标识符所在表的下标 int type; //标识符的类型 int line; //标识符所在表的行数 char symbol[20]; //标识符所在表的名称 }Table; int TableNum = 0; //...

    C语言 typedef:给类型起一个别名

    C语言允许为一个数据类型起一个新的别名,就像给人起“绰号”一样。 起别名的目的不是为了提高程序运行效率,而是为了...使用关键字 typedef 可以为类型起一个新的别名,语法格式为: typedef oldName newName; o

    《你必须知道的495个C语言问题》

    我试过typedef struct {char *item; NODEPTR next;}* NODEPTR;但是编译器报了错误信息。难道在C语言中结构不能包含指向自己的指针吗? 7 1.15 如何定义一对相互引用的结构? 9 1.16 Struct {...} x1;和typedef ...

    你必须知道的495个C语言问题

    我试过typedef struct {char *item; NODEPTR next;}* NODEPTR;但是编译器报了错误信息。难道在C语言中结构不能包含指向自己的指针吗? 7 1.15 如何定义一对相互引用的结构? 9 1.16 Struct {...} x1;和typedef ...

    C数据结构之单链表详细示例分析

    代码如下:#include <stdio>#include <stdlib>typedef struct type{ int num; struct type *next;}TYPE;//=============================================================// 语法格式: TYPE *init_link_head(int ...

    用C语言开发小型数据库管理系统.txt

    [头文件data.h] #define NULL 0 #define LEN sizof(STD) typedef struct { char xh[12]; /*学号*/ char xm[12]; /*姓名*/ char sxcj[5]; /*数学成绩*/ char cxsj[5]; /*程序设计成绩*/ char zf[5]; /*总分*/ struct...

    西北工业大学版(蒋立源第三版)编译原理课后习题答案

    3解:C语言的关键字有:auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned...

    课程设计二 表达式语法分析程序的构造

    typedef struct { char c[100]; int top; }seqstack; seqstack s; seqstack i; seqstack* sy=&s; seqstack* in=&i; char pop(seqstack* s) { char a=s->c[s->top]; s->top--; return a; } void push(char c,...

    编译原理课后习题答案(蒋立源第三版)

    3解:C语言的关键字有:auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned...

    编译原理西北工业大学课后答案

    3解:C语言的关键字有:auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned...

    数据结构C严蔚敏版_全注释源码_线性表队列栈监视哨查找折半直接插入排序冒泡快速选择

    里面包含超大量的注释,包括对VC6的语法解释和算法的解释和理解。具体效果可以看 http://download.csdn.net/detail/changechange/8236207 我上次上传的 EXE demo,带输入输出,能与用户交互。在运行的时候会把整个...

    驱动程序设计基础专题-filedisk源码分析

    typedef struct _OPEN_FILE_INFORMATION { LARGE_INTEGER FileSize;//文件大小 BOOLEAN ReadOnly;//只读属性 USHORT FileNameLength;//文件名长度 UCHAR FileName[1];//文件名 UCHAR DeviceType;//判断是K\G\M...

    你必须知道的495个C语言问题.pdf

    我试过typedef struct{char *item; NODEPTR next;}* NODEPTR; 但是编译器报了错误信息。难道在C语言中结构不能包含指向自己的指针吗? 1.15 如何定义一对相互引用的结构? 1.16 Struct{ } x1;和typedef struct{ } x2...

    阮一峰《C 语言教程》从入门到精通

    基本语法 变量 运算符 流程控制 数据类型 指针 函数 数组 字符串 内存管理 struct 结构 typedef 命令 Union 结构 Enum 类型 预处理器 I-O 函数 文件操作 变量说明符 多文件项目 命令行环境 多字节字符 标准库 assert...

Global site tag (gtag.js) - Google Analytics