C typedef
typedef 关键字可以用来为类型取一个新的名字。
举例:为单字节数字定义一个术语BYTE
typedef unsigned char BYTE;
此后,标识符 BYTE 便可作为类型 unsigned char 的缩写
BYTE b1,b2;
使用 typedef 来为用户自定义的数据类型取一个新的名字。
typedef vs #define
不同点:(很细微的小点哦)
- typedef 仅限于为类型定义符号名称,#define 不仅可以为类型定义别名,也能为数值定义别名,比如您可以定义 1 为 ONE。
- typedef 是由编译器执行解释的,#define 语句是由预编译器进行处理的。
- #define运用于为数值定义别名
- #define可以使用其他类型说明符对宏类型名进行扩展,但对 typedef 所定义的类型名却不能这样做。
如:#define INTERGE int;
unsigned INTERGE n;
但是如果是typedef则不能加上unsigned。
- 在连续定义几个变量的时候,typedef 能够保证定义的所有变量均为同一类型,而 #define 则无法保证。
#define PTR_INT int *
PTR_INT p1, p2; (定义了int *p1,int p2)
typedef int * PTR_INT
PTR_INT p1, p2;(定义了int p1,p2)
typedef的特殊功能
- 如
typedef char *STRING;
//此时编译器认为STRING是一个类型的标识符,该类型指向char
STRING name,sign;即char *name,*sign;
-
typedef 给出的符号名称仅限于对类型,而不是对值。
-
typedef 的解释由编译器,而不是预处理器执行。并不是简单的文本替换。
-
虽然范围有限,但是在其受限范围内 typedef 比 #define 灵活。
-
为复杂的声明定义一个新的简单的别名。
int *(*a[5])(int, char*);//首先将*a[5]这个指针数组看为整体即int *(p)(int,char*),然后这代表了p即a[5]是函数指针,指向了形参是int和char*。
typedef int *(*pFun)(int, char*);
pFun a[5];