1 #define和typedef的区别
#define和typedef都可以用来给现有类型起别名,但#define只是简单的宏替换,在预编译时被处理;而typedef不是的,在编译时被处理。
区别一
#define dchar char *
typedef char * tchar;
dchar p1,p2; //等价于char *p1,p2;只是p1才是指针变量char * 类型,p2是char类型
tchar p3,p4; //等价于char *p3,*p4;p3,p4都是指针变量
#define没有分号,而typedef 作为语句,必须有分号。
区别二
#define 可以实现类型组合
#define dint int ;
typedef int tint ;
unsigned dint p1,p2; //等价于unsigned int p1,p2
unsigned dint p1,p2; //不正确
区别三
typedef可以组建新类型
typedef char[200] charbuf;
charbuf buf; //等价于char buf[200]
2 typedef关键字的用法
typedef是C语言中的一个关键字,用于定义新的类型(或者叫类型的重命名),而不是变量。C语言中的类型一共有两种:一种是编译器定义的原生类型(基础数据类型,如int、double等);另一种是用户自定义类型(如数组类型、结构体类型、函数类型)。
3 typedef的应用
举例
typedef int size;//typedef行
int i;//原型行
size i;//应用行
typedef char line[81];//typedef行
char t[81];//原型行
Line t;//应用行
typedef int (*fun_ptr)(int,int);//typedef行
int (*fp)(int,int);//原型行
fun_ptr fp;//应用行
fun_ptr是类的别名,fp是该类的变量
注意
typedef是给类型取别名的,typedef在语法上是一个存储类的关键字(如auto、extern、static、register),而变量只能被一种存储类的关键字修饰。
4 typedef与struct
先定义结构体类型,再用结构体类型定义变量。
typedef struct node{ } Node;//给struct node{ }类型取别名
Node n;//利用结构体类型申请变量
5 typedef的重要意义
(1)简化类型
(2)创造平台无关类型,便于移植