一,区别
1,typedef 关键字,从字面意思来看,类型定义,其实不然,他不是类型定义,而是给现有的类型起别名,理解成 typerename 更好。并不会增加新的数据类型,但可以使书写更方便
2,typedef 只对数据类型起作用,#define 还可以作用于数据。
3,#define 处理的信息发生预处理阶段。而 typedef 是 c 语言语句,发生在编译阶段。
4 预处理不是c语言语句,所以在使用时不应该加“;”,预处理命令是在预处理阶段完成,本质是替换操作,常用大写字母来表示
5 程序执行的步奏:预处理(在此阶段不会进行错误的检查),汇编,编译(在在此处函数只要定义就可以编译通过),链接(在此阶段函数需要有实现)
6取消宏定义 #undef MAx
二,案例
#define CHAR char *
typedef char * CHARP ; //为char *起一个别名
typedef int ARRY[10] ; //为int数组起别名
int main(void)
{
CHAR pa,pb;//like char *pa,pb;
CHARP pat,pbt;//like char* pat,*pbt;
ARRY arr;//like int arr[10];
printf("pa=%d,pb=%d\n",sizeof(pa),sizeof(pb));
printf("pat=%d,pbt=%d\n",sizeof(pat),sizeof(pbt));
printf("arr=%d\n",sizeof(arr));
return 0;
}
结果如下
如何在使用#define时适当的加上括号 也许就不一样了哦
#define CHAR (char *)
typedef char * CHARP ; //为char *起一个别名
typedef int ARRY[10] ; //为int数组起别名
int main(void)
{
CHAR pa,pb;//like char *pa,pb;
CHARP pat,pbt;//like char* pat,*pbt;
ARRY arr;//like int arr[10];
printf("pa=%d,pb=%d\n",sizeof(pa),sizeof(pb));
printf("pat=%d,pbt=%d\n",sizeof(pat),sizeof(pbt));
printf("arr=%d\n",sizeof(arr));
return 0;
}
结果:
因为CHAR pa,pb; 就类似于(char*)pa,pb这样不对的语法,#define在使用的时候只是进行代替而不进行变化,所以在使用时不应该进行变化要直接带进去然后再进去相对应的运算。