主题:[讨论]请教 typedef 的使用方法
nana_aoe
[专家分:60] 发布于 2010-04-24 17:06:00
typedef是否就是一个定义近义词的意思?
如 typedef enum Boolean{FALSE,TURE}Boolean 是否可以认为是
Boolean 即 enum Boolean{FLASE,TURE} a;
这样认为对吗?
有段代码是这样的
typedef enum state {FLASE,TURE} State;
typedef State Grid[MAXROW+2][MAXCOL+2];
这两句怎么解?
最后更新于:2010-04-24 17:18:00
回复列表 (共5个回复)
沙发
雪光风剑 [专家分:27190] 发布于 2010-04-24 18:05:00
你的看法不太正确。typedef定义的不是近义词而是同义词,也就是说typedef的参数2是类型名而不是变量名
在你给出的范例typedef里
typedef enum Boolean{FALSE,TURE} Boolean;
那么,在后面的变量声明中,Boolean成为了一种新的类型,是取值范围为FALSE,TURE的枚举类型
你的代码段中,第二句是对新定义好的同义词进行了第二次同义词定义,这次定义的是一个二维数组类型
你给出的代码段执行后,如果声明Grid a,那么a是一个[MAXROW+2][MAXCOL+2]的一个二维数组,每个元素是取值范围为FALSE,TURE的枚举类型
明白了吗?
板凳
nana_aoe [专家分:60] 发布于 2010-04-24 19:20:00
typedef enum state {FLASE,TURE} State;
typedef State Grid[MAXROW+2][MAXCOL+2];
是说两次同义词定义?
那我这样定义是否可以行的通呢?
typedef enum state {FLASE,TURE} Grid[MAXROW+2][MAXCOL+2];//也就是说两句和成一句
前面对Grid a;声明过了。
3 楼
雪光风剑 [专家分:27190] 发布于 2010-04-24 21:46:00
原则上讲,这样写没有错,只不过当你需要单独的State类型(也就是枚举类型)的时候又要重写一次了。起别名实际上是一种封装,要考虑逐层封装的问题
4 楼
强强 [专家分:4740] 发布于 2010-04-24 22:03:00
并非近义词的意思TYPEDEF=TYPE DEFINE即:定义一个类型
TYPE是一个类型,一个数据的描述
例如:"肥头大耳长鼻子"是一个自定义的类型
TYPEDEF Pigtype "肥头大耳长鼻子"
那么Pigtype就是一个描述猪的类型
Pigtype a,b,c;中a,b,c就是一头头猪
TYPEDEF让编程的人可以用自己定义的类型来声明变量
5 楼
雪光风剑 [专家分:27190] 发布于 2010-04-24 23:09:00
强强……你说反了……
typedef起类型别名的用法是
typedef 类型1 类型2,是给类型1起别名为类型2……
我来回复