typedef 和#define
#define 是预编译指令,在预编译时进行一个简单的变换,而不作正确性的检查。不关含义是否正确都会照样代入,只有在编译已被打开的源程序时才会发现并报错。例如:
#define PI 3.1416926 //当我们在程序中使用 area = PI*r*r 。会在编译时替换为:3.1415926*r*r 。
而如果我们误将3.1415926输入成:3.1415g26在预编译时不会出错。只有在打开后才会发现这个错误。
而与此相反。typedef是在编译时处理。在自己的作用域内给一个已存在的类型一个别名。但是很明显这个是不能在函数定义中使用。相当于引入了一个助记符。
当然由于这两者的差别所以也会导至在使用时会存在,例如:
typedef int* pint;
#define dint int*;
pint 为一种指针类型。当使用 const pint p 便把指针锁住。故指针 p 不可更改,而 p 指向内容是可改变的。
dint 。当使用 const pint p 便把指针锁住。待价于const int* p。故 p 可更改而 p 指向内容可改变。