struct和typedef使用的辨析

来源:互联网 发布:php项目源代码下载 编辑:程序博客网 时间:2024/06/06 13:17

首先理一下对于学习数据结构很重要的基础知识。

比如,绝对理解下面的定义方式:

typedef struct LNode{    ElemType data;    struct LNode *next;} LNode, *LinkList;

如果不理解,那你应该看看下面的:

struct LNode{    ElemType data;    struct LNode *next;};typedef struct LNode LNode;typedef struct LNode *LinkList;

上面两种定义方式等价,第一种是实际中用到的,如果还不理解,那应该看看下面:

用typedef声明新类型名 有以下两种情况: 1、简单的用一个新的类型名代替原有的类型名 2、命名一个简单的类型名代替复杂的类型表示方法

结构体的用法:

不指定类型名而直接定义结构体类型变量
其一般形式为

struct{      成员表列;}变量名表列;

指定了一个无名的结构体类型,它没有名字(不出现结构体名)。显然不能再以此结构体类型去定义其他变量。

到这里应该很明白,我试图解释的是结构体和typedef的用法。

命名一个新的类型名代表结构体类型:

typedef struct{ int month;  int day;  int year;}Date;

以上声明了一个新类型名Date,代表上面的一个结构体类型。然后可以用新的类型名Date去定义变量,如:

Date birthday;    //定义结构体类型变量birthday,不要写成struct Date birthdayDate * p;               //定义结构体指针变量 p,指向此结构体类型数据

问:上面的和

struct{  int m;   int d;   int y;}Date;

一样么?
分析:前者的Date,按下文的说法,是一个结构体类型名;而后者显然是一个结构体变量名,它就相当于下面的birthday。这就是区别所在。

0 0
原创粉丝点击