先说一下两者的概念
1、#define
预处理阶段进行简单的字符串替换,没有安全性检查
2、typedef
在自己的作用域内给一个已经存在的类型一个别名,编译阶段。
两者的区别
(1)执行时间不同
#define在预处理(预编译)阶段,进行替换工作
typedef在编译阶段,会进行类型检查
(2)作用域不同
#define:无论在哪定义过,在其他地方都可以使用
typedef:只能在定义的作用域内使用
(3)对指针的操作不同
#define PINT int*;
const PINT p;//相当于const int * p;p可以被修改,但指向的内容不可以修改
typedef int * PINT;
const PINT p;//相当于int * const p;p不可以修改,但指向的内容能被修改