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++中struct和typedef struct的区别以及各种用法
typedef struct WordAnalysisList { struct WordAnalysisList *last; char index;//以字母作为标号 其index为在endSign中对应的元素 char value[128];//对应值字符串 struct WordAnalysisList *next; }...
可以对诸如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 可以为类型起一个新的别名,语法格式为: typedef oldName newName; o
我试过typedef struct {char *item; NODEPTR next;}* NODEPTR;但是编译器报了错误信息。难道在C语言中结构不能包含指向自己的指针吗? 7 1.15 如何定义一对相互引用的结构? 9 1.16 Struct {...} x1;和typedef ...
我试过typedef struct {char *item; NODEPTR next;}* NODEPTR;但是编译器报了错误信息。难道在C语言中结构不能包含指向自己的指针吗? 7 1.15 如何定义一对相互引用的结构? 9 1.16 Struct {...} x1;和typedef ...
代码如下:#include <stdio>#include <stdlib>typedef struct type{ int num; struct type *next;}TYPE;//=============================================================// 语法格式: TYPE *init_link_head(int ...
[头文件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...
里面包含超大量的注释,包括对VC6的语法解释和算法的解释和理解。具体效果可以看 http://download.csdn.net/detail/changechange/8236207 我上次上传的 EXE demo,带输入输出,能与用户交互。在运行的时候会把整个...
typedef struct _OPEN_FILE_INFORMATION { LARGE_INTEGER FileSize;//文件大小 BOOLEAN ReadOnly;//只读属性 USHORT FileNameLength;//文件名长度 UCHAR FileName[1];//文件名 UCHAR DeviceType;//判断是K\G\M...
我试过typedef struct{char *item; NODEPTR next;}* NODEPTR; 但是编译器报了错误信息。难道在C语言中结构不能包含指向自己的指针吗? 1.15 如何定义一对相互引用的结构? 1.16 Struct{ } x1;和typedef struct{ } x2...
基本语法 变量 运算符 流程控制 数据类型 指针 函数 数组 字符串 内存管理 struct 结构 typedef 命令 Union 结构 Enum 类型 预处理器 I-O 函数 文件操作 变量说明符 多文件项目 命令行环境 多字节字符 标准库 assert...