typedef的用法

来源:互联网 发布:川农网络付费 编辑:程序博客网 时间:2024/04/27 16:16
 

C/C++语言中的typedef相信大家已经不陌生,本文对C/C++语言关键字typedef的各种用法作一个介绍。


typedef,顾名思义,为“类型定义”,可以解释为:将一种数据类型定义为某一个标识符,在程序中使用该标识符来实现相应数据类型变量的定义。例如:


 


typedef unsigned int UINT;


int main (int argc, char *argv[])


{


    unsigned int a;   // it’s OK


    UINT b;    // it’s OK, a and b are of the same type (int)


    // . . .   // code references the symbol a and b


    return 0;


}


 


上面的代码中,ab属于同一种数据类型(unsigned int型),因为UINT标识符已经标示为unsigned int类型。上面的代码看似简单,相信很多读者都用过这种方法,但这绝不是typedef的全部,下面介绍使用typedef定义复杂数据类型的几种用法。


 


1、 定义结构体类型


结构体是一种较为常见的数据类型,在C/C++程序设计中使用的非常广泛。下面的代码就是结构体类型的一个应用:


#include <iostream.h>


int main (int argc, char *argv[])


{


    struct {int x; int y;} point_a, point_b;


    point_a.x = 10; point_a.y = 10;


    point_b.x = 0; point_b.y = 0;


    ios::sync_with_stdio();


    cout << point_a.x + point_a.y << endl;


    cout << point_b.x + point_b.y << endl;


    return 0;


}


上面的代码包含了两个结构体变量:point_apoint_b,它们的数据类型相同,都是struct {int x; int y;}类型。这种说法可能有点别扭,习惯上说point_apoint_b都是结构体类型,为什么偏偏要说是struct {int x; int y;}类型呢?因为这种说法更加精确。比如在第一个例子中,对于“unsigned int a, b;”这条语句,我们可以说ab都是整数类型,但更精确地说,它们应该是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变量,它的数据类型是一个复杂的结构体类型,有两个成员:part1part2part1struct {int x; int y;}类型的,part2int类型的。


从上面的例子可以看出,如果在程序中需要多处定义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;


}


显然,这种方法没有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;


};


 


2、定义数组类型


与定义结构体类型相似,可以使用typedef来定义数组类型,例如:


typedef int MyIntArray [100];


那么程序中的


MyIntArray ia;

原创粉丝点击