快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

新蒲京澳门app下载_蓝莲花网进入



1. 基础解释

typedef为C说话的关键字,感化是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。

在编程中应用typedef目的一样平常有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些对照繁杂的类型声明。

至于typedef有什么奥妙之处,请你接着看下面对几个问题的详细阐述。

2. typedef & 布局的问题

当用下面的代码定义一个布局时,编译器报了一个差错,为什么呢?莫非C说话不容许在布局中包孕指向它自己的指针吗?请你先猜想一下,然后看下文阐明:

typedef struct tagNode

{

char *pItem;

pNode pNext;

} *pNode;

谜底与阐发:

1、typedef的最简单应用

typedef long byte_4;

给已知数据类型long起个新名字,叫byte_4。

2、 typedef与布局结合应用

typedef str新蒲京澳门app下载uct tagMyStruct

{

int iNum;

long lLength新蒲京澳门app下载;

} MyStruct;

这语句实际上完成两个操作:   1) 定义一个新的布局类型

struct tagMyStruct

{

int iNum;

long lLength;

};

阐发:tagMyStruct称为“tag”,即“标签”,实际上是一个临时名字,struct 关键字和tagMyStruct一路,构成了这个布局类型,不论是否有typedef,这个布局都存在。

我们可以用struct tagMyStruct varName来定义变量,但要留意,应用tagMyStruct varName来定义变量是纰谬的,由于struct 和tagMyStruct合在一路才能表示一个布局类型。

2) typedef为这个新的布局起了一个名字,叫MyStruct。

typedef struct tagMyStruct MyStruct;

是以,MyStruct实际上相称于struct tagMyStruct,我们可以应用MyStruct varName来定义变量。

谜底与阐发

C说话当然容许在布局中包孕指向它自己的指针,我们可以在建立链表等数据布局新蒲京澳门app下载的实现上看到无数这样的例子,上述代码的根本问题在于typedef的利用。

根据我们上面的阐述可以知道:新布局建立的历程中碰到了pNext域的声明,类型是pNo新蒲京澳门app下载de,要知道pNode表示的是类型的新名字,那么在类型本身还没有建立完成的时刻,这个类型的新名字也还不存在,也便是说这个时刻编译器根本不熟识pNode。

办理这个问题的措施有多种:

1)、

typedef struct tagNode

{

char *pItem;

struct tagNode *pNext;

} *pNode;

2)、

typedef struct tagNode *pNode;

struct tagNode

{

char *pItem;

pNode pNext;

};

留意:在这个例子中,你用typedef给一个还未完全声明的类型起新名字。C说话编译器支持这种做法。

3)、规范做法:

struct tagNode

{

char *pItem;

struct tagNode *pNext;

};

typedef stru新蒲京澳门app下载ct tagNode *pNode;

系列文章:

水点石穿C说话之代码反省对象

水点石穿C说话法度榜样设计之精确应用const

水点石穿C说话之声明的语法

水点石穿C说话之可变参数问题

水点石穿C说话之指针综合谈

您可能还会对下面的文章感兴趣: