C/C++中typedef关键字用法总结

来源:互联网 发布:数据库系统实现英文版 编辑:程序博客网 时间:2024/05/23 19:16

首先介绍下typedef,它是一个关键字,可以理解为用于将数据类型起一个别名,但是与#define不同的是,typedef是编译期间由编译器进行处理的,而#define是一个预编译指令,是在预编译期由预处理器进行处理的。

typedef关键字有很多种用法,下面就对此进行总结下:

用于内置类型:

typedef int sizeArr;void func(int* arrNum,sizeArr n){       //sizeArr == int    for(int i=0;i<n;++i){        std::cout << arrNum[i] << " ";    }}
一个典型的传递数组的函数,参数1接收一个数组首元素地址,参数2接收一个数组大小(元素个数),当然参数2可以用int n;代替,因为在这里sizeArr是int的别名,但是用int n;的话,可能用户在调用该函数的时候,就不是很清楚参数2接收什么东西的,而通过typedef定义一个别名,这样用户就能一目了然,知道参数2是接收一个数组大小的。

又如以下代码:

    typedef unsigned char BYTE;    unsigned char Temp;          //#1    BYTE Temp1;                  //#2
#1和#2的定义是等价的,当需要频繁定义unsigned char类型时,#2比#1定义方便很多,并且在代码中,可读性#2肯定也是比#1好的。另外通过typedef定义的别名,也增加了移植性,例如换了一个环境后,可能需要对代码中的所有int替换成long或其他类型,可能需要修改很多处,如果手动替换是非常费人力的,而且还可能出错。当通过typedef定义int别名后,代码中使用该别名,那么需要修改的时候,只需修改typedef定义的这一处即可。

另外当需要定义数个指针变量的时候,可能刚学C/C++不久的同学由于习惯性int a,b,c;这么定义多个变量,那么定义指针的时候可能也这么写:

    int* p1,p2;
实际上这是定义一个指向int类型的指针变量(p1)和一个int类型的变量(p2),p2并不是指针变量。

那么typedef可以这么定义:

typedef int* pNum;pNum p1,p2;
将pNum作为int*的别名,该代码也就是定义了俩指针(p1和p2),非常方便。

用于结构体(struct):

struct Temp{        int Num1;        int Num2;};
在C语言中,如果想定义一个结构体变量,那么必须这么定义:

struct Temp t1;
当代码中需要定义很多该结构体的话,可能就会比较麻烦,因为定义语句中必须包括struct Temp,如果使用typedef就会比较方便,看如下代码:

typedef struct Temp{        int Num1;        int Num2;}TempNum;TempNum t1;    //定义一个struct Temp结构体变量
这样每次定义该结构体的时候,只需用该结构体别名TempNum进行定义即可。

用于数组:

    char Str1[10];    char Str2[10];
当需要定义多个char类型并且元素个数都相同的数组时,如果用如上代码分别定义的话,可能会比较麻烦,typedef依然可以解决该问题:

    typedef char STR[10];    STR s1;    STR s2;
这样就定义了俩元素个数都为10的char类型数组,是不是很方便呢?

用于函数指针:

假设有一个函数,他接收俩个函数指针:

void f1(int n){    /*    .........    */}void f2(int n){    /*    .........    */}void Func(void(*s1)(int),void(*s2)(int)){   //接收俩参数为int的并且返回类型为void的函数指针    /*    .........    */}
Func(f1,f2);
或者代码中有很多地方都需要定义一个参数为int并且返回void的函数指针变量,那么使用void(*s1)(int)形式定义一个该类型的函数指针变量(s1)将会很麻烦 ,如果使用typedef将会方便很多:

typedef void(*SS)(int);void Func(SS s1,SS s2){    /*    .........    */}
该Func等价于上面的void Func(void(*s1)(int),void(*s2)(int));
以上就是对typedef的使用方法上进行了小小总结,便于以后进行查阅~

原创粉丝点击