要把typedef是一种彻头彻底的“封装”类型--声明之后不能再往里面添加别的东西。
把#define看做是在预处理时进行的单纯的字符替换
区别1:
能使用其他类型说明符对宏定义进行扩展,但typedef不能。
#define peach int
unsigned peach i; //没有问题
typedef int banana;
unsigned banana i; //错误,非法
区别2:
在连续变量声明中,typedef能保证这些连续的变量都是同一种类型,但#define不能
typedef int * int_ptr;
int_ptr p1,p2; //p1,p2都是int *指针
**********************************
#define int_ptr int *
int_ptr p1,p2;
预处理经过宏扩展后,第二行为:
int * p1,p2; //这样p1就是int的指针,而p2是int类型变量