- 先让我们了解一下typedef的功能,typedef简单来说就是给类型取一个别名;
如 typedef int New 那么int就有一个别名叫New了,以后size就和int这个类型一共用法了。
但如果仅仅认为typedef是把第一个参数(类型名)等同于第二个参数就太单纯了,他还有更复杂化的用法:
typedef char LINE[81] 它真的含义是LINE代表了81个元素的字符数组;那么 LINE t 就等同于char t[81];
还可以举一个函数指针的例子,如下:
1 typedef int (*func_ptr)(int,int); //typedef行 2 3 int (*fp)(int,int); //原型行 4 func_ptr fp; //应用行,与原型行实现的功能完全一样
首先,“typedef行”和“原型行”相比较,前者仅仅多了一个typedef而已;就函数指针的例子而言,他们俩的根本区别在于func_ptr是类的别名,fp是这个类一个具体的变量。
其次,“应用行”和“原型行”编译结果是完全一样的。就函数指针而言,他们都是创建了一个类型为 int (*)(int,int)的函数指针fp。可是func_ptr fp 比 int (*fp)(int,int) 形式更
加简单,便于书写和理解。形势越复杂,typedef的优势越明显。
- typedef与#define宏区别
与typedef不同,#define只是单纯的替换,,替换发生在预编译的过程,此时可以吧#define的每个参数看成一堆字母,#define只是将一堆字母傻傻的用领一堆字母替换。
#define dpChar char * typedef char * tpChar; dpChar p1,p2; tpChar p3,p4;
这么里貌似#define和typedef想干的都是同一件事——用一个新的名字替换点 char *;首先要注意书写顺序上,两者还是有区别的,#define是将新定义的名词变量放在
第一个参 数,把已有的参数或者类型名放于后面第二个参数,其实这个也很好连向,以前定义数学符号π时常用 #define PI 3.14159 来进行声明。
我们再来看结果:dpChar是#define定义的,按照替换原则,替换结果为 char *p1,p2;等价于定义了char *p1;char p2;此时p1是char *类型,p2是char类型。
tpChar是typedef给char *取的别名,此时定义出的p3、p4类型都是char *。