一、typedef的作用
1、typedef的一个重要用途是定义机器类型无关的类型。
例如在适用long double
的目标机器上定义名为“REAL”
的数据类型:
typedef long double REAL;
如果在不适合long double
的机器上运行相关代码,只需要修改对应的typedef
语句。例如:
typedef double REAL;
//或者
typedef float REAL;
2、使用typedef
为现有类型创建别名,给变量定义一个易于记忆且意义明确的新名字
例如:
typedef unsigned int UNINT;
3、使用typedef
简化一些比较复杂的类型声明
例如:
typedef void (*PFunCallBack)(char* pMsg, unsigned int nMsgLen);
二、七种类型定义
1、常规变量类型定义
// uchar等价于 unsigned char
typedef unsigned char uchar
// 两种定义方式相同
uchar c;
unsigned char c;
2、数组类型定义
// array 等价于 int [2]
typedef int array[2];
// 两种定义方式相同
array a;
int a[2];
// 扩展
// array 等价于 int [M][N]
typedef int array[M][N];
// 两种定义方式相同
array a;
int a[M][N];
3、指针类型定义
// pointer 等价于 int*定义
typedef int* pointer;
// 两种定义方式相同
pointer p;
int *p;
// 拓展
typedef int *pointer[M];
// 两种定义方式相同
pointer a;
int *a[M];
4、函数地址说明
// C把函数名字当做函数的首地址来对待,我们可以使用最简单的方法得到函数地址
5、函数声明
// func 等价于 int (void)函数
typedef int func(void);
// func f声明等价于 int f(void)声明,用于文件的函数声明
func f;
int f(void);
// func *pf声明等价于 int (*pf)(void)声明,用于函数指针的生命,同下一条
func *pf;
int (*pf)(void);
6、函数指针
// func 等价于 int(*)(void)类型
typedef int(*func)(void)
// 两种定义方式相同
func pf; // pf是一个函数指针变量
int (*pf)(void);
三、typedef与#define
两者的区别如下:
-
①
#define
进行简单的字符串替换。-
#define pStr1 char*; pStr1 s1,s2; // 解释 // s1 是 char* 类型,s2是char类型 // 因为#define只做简单的字符串替换,替换后的代码等同于: char *s1, s2; // s2没有享受到 *
-
-
②
typedef
是为一个类型起新名字。-
typedef char* pStr2; pStr2 s3,s4; // 解释 // typedef 为 char* 定义了新类型 pStr1 后,相关代码等同于为: char *s3, *s4;
-