typede的详解
typedef的专题总结;用法一:为现有数据类型定义同义词;用法二:typedef 还可以掩饰复合类型,如指针和数组;用法三:在链表中的应用;用法四:代码简化和促进扩平台开发;C++实例;补充1:链表的三种定义结构体;第二种:struct??student??{?????int?num?;?????char?name[8];??????char?sex;?????double?score[2];??}stu1;?? //方法二 此处定义结构体student时,顺便定义了结构体变量stu1 。第三种:?typedef?struct??student??{????int?num?;????char?name[8];??????char?sex;?????double?score[2];?}stu;????//方法三?注意:此处并非结构体变量,而是结构体类型student和stu;定义结构体类型 ;上面的代码包含了两个结构体变量:point_a和point_b,它们的数据类型相同,都是struct {int x; int y;}类型。这种说法可能有点别扭,习惯上说point_a和point_b都是结构体类型,为什么偏偏要说是struct {int x; int y;}类型呢?因为这种说法更加精确。比如在第一个例子中,对于“unsigned int a, b;”这条语句,我们可以说a和b都是整数类型,但更精确地说,它们应该是unsigned int类型。既然struct {int x; int y;}是一种自定义的复杂数据类型,那么如果我们要定义多个struct {int x; int y;}类型的变量,应该如何编写代码呢?其实很简单,就当struct {int x; int y;}是一个简单数据类型就可以了:struct?{int?x;?int?y;}?var_1;?//?定义了变量var_1 ?struct?{int?x;?int?y;}?array_1?[10];?//?定义了数组array_1 ?struct?{struct{int?x;?int?y;}?part1;?int?part2;}?cplx;?上面的第三行定义了一个cplx变量,它的数据类型是一个h复杂的结构体类型,有两个成员:part1和part2。part1是struct {int x; int y;}类型的,part2是int类型的。从上面的例子可以看出,如果在程序中需要多处定义struct {int x; int y;}类型的变量,就必须多次输入“struct {int x; int y;}”这一类型名称,况且,如果在结构体中有某个成员是struct {int x; int y;}类型的,还会使得定义变得非常繁杂而且容易出错。为了输入程序的方便,同时为了增强程序的可读性,我们可以把struct {int x; int y;}这一数据类型定义为标识符“Point”,那么上面的程序就会变得更容易理解:;typedef?struct?{int?x;?int?y;}?Point; ?Point?var_1;?//?定义了变量var_1 ?Point?array_1?[10];?//?定义了数组array_1 ?struct?{Point?part1;?int?part2;}?cplx;?//?定义了复杂类型变量cplx?需要说明的是,我们还可以使用下面的方法来定义结构体变量:struct?t_Point?{ ?int?x;?int?y;};?//?注意,这里最后一个分号不能省略 ?int?main(int?argc,?char*?argv[]) ?{ ?struct?t_Point?a,?b; ?//?.?.?. ?return?0; ?}?显然,这种方法没有C++ typedef更加直观(在C++中,main函数第一行的struct关键字可以省略,但在标准C中,省略该关键字会出现编译错误)。此外,对于定义链接队列中的结点,我们可以这样实现:typedef?struct?t_node?{ ?int?Value; ?struct?t_node?*next; ?}?Node; ?当然也可以这样定义: ?typedef?strcut?t_node?Node; ?struct?t_node?{ ?int?Value; ?Node?*next; ?};?;类是面向对象程序设计语言中引入的一种新的数据类型,既然是数据类型,就可以使用C++ typedef对其进行定义:typedef?class?{ ?private: ?int?a; ?public: ?int?b; ?}?M