c语言结构体数组请问这两种定义有什么差别

typedef struct
{
int ID;
char Title[50];
char Director[50];
char PubTime[50];
char Area[50];
int LongTime;
char Pic[150];
}GetHotClipInfos;

GetHotClipInfos film[MAX_FILM];

typedef struct
{
int ID;
char Title[50];
char Director[50];
char PubTime[50];
char Area[50];
int LongTime;
char Pic[150];
}film[MAX_FILM];
这两种定义方法有什么区别呢。。。
是不是都可以film[i]pic这样用的。。。。。。。。。。。。

typedef struct
{
int ID;
char Title[50];
char Director[50];
char PubTime[50];
char Area[50];
int LongTime;
char Pic[150];
}GetHotClipInfos; // 结构体类型为GetHotClipInfos 例如 GetHotClipInfos obj;
//是定义一个对象,而要定义数组则 GetHotClipInfos film[MAX_FILM];

GetHotClipInfos film[MAX_FILM];

typedef struct
{
int ID;
char Title[50];
char Director[50];
char PubTime[50];
char Area[50];
int LongTime;
char Pic[150];
}GetHotClipInfosArr[MAX_FILM]; //这里改名字 为可清晰说明问题而已
// GetHotClipInfosArr是一个数组类型
//当定义 GetHotClipInfosArr film0; 那么film0在这里是数组
//相当于用第一个:GetHotClipInfos film1[MAX_FILM];
//那么film0 和 film1是一样的 都是MAX_FILM个同样的类型
//为GetHotClipInfos的对象的数组
//都可以film0[i] .pic和film1[i] .pic这样用的

结果:是没有区别的

关键在typedef 是为现有类型创建同义字,没有出现新的类型
Typedef 声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法。不管怎样,使用 typedef 能为代码带来意想不到的好处,通过本文你可以学习用 typedef 避免缺欠,从而使代码更健壮。
typedef 声明,简称 typedef,为现有类型创建一个新的名字。比如人们常常使用 typedef 来编写更美观和可读的代码。所谓美观,意指 typedef 能隐藏笨拙的语法构造以及平台相关的数据类型,从而增强可移植性和以及未来的可维护性。本文下面将竭尽全力来揭示 typedef 强大功能以及如何避免一些常见的陷阱。
如何创建平台无关的数据类型,隐藏笨拙且难以理解的语法?
使用 typedef 为现有类型创建同义字。
定义易于记忆的类型名
typedef 使用最多的地方是创建易于记忆的类型名,用它来归档程序员的意图。
类型出现在所声明的变量名字中,位于 ''typedef'' 关键字右边。

想要了解更详细的情形,请参考:

参考资料:http://baike.baidu.com/view/1283800.htm

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-02-28
第二种是错误的定义方法!!
请你告诉我你的第二种方法定义的意思!
film为一个typedef name,film[MAX_FILM]???
这不是正确的表示方法,第二种你是不是多写了个typedef啊,如果不写,就是同样的意思了本回答被提问者采纳
第2个回答  2011-02-28
两种定义没什么区别,第一种是结构体直接定义为GetHotClipInfos,第二种是先定义结构体为film[MAX_FILM],再说明 film[MAX_FILM]就是GetHotClipInfos。 第二种用的是宏定义,修改名称的话直接在开头修改GetHotClipInfos即可。而第一种则要修改所有的GetHotClipInfos。
相似回答