typedef 本质上是定义了一种新的类型, 该新类型可以原有类型的别名或是原有类型的组合。
而#define 只是字符串的替换。
如定义: typedef char* CHARP;
则 CHARP a, b; 等价于 char* a; char* b;
而定义: #define char* CHARP;
则 CHARP a, b; 等价与 char* a, b;即 char* a; char b;
http://www.cnblogs.com/csyisong/archive/2009/01/09/1372363.html 给出了总结。
指针函数本质是一个返回值为指针类型的函数名;函数指针本质上是一个指向特定函数类型的指针。
http://blog.sina.com.cn/s/blog_5e8facd20100qn20.html 上有详细解释。