#define和typedef的区别

一,区别
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在使用的时候只是进行代替而不进行变化,所以在使用时不应该进行变化要直接带进去然后再进去相对应的运算。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值