define与typedef

今天遇到一个有关于define和typedef的题,如下。
一个test.c文件中包含如下语句:

#define INT_PTR int *
typedef int* int_ptr;
INT_PTR  a,b;
int_ptr  c,d;

问:文件中定义的四个变量,哪个变量不是指针类型_b__.
解释:#define INT_PTR int* 这是宏定义,编译预处理阶段要进行宏替换,这个替换时不做任何检查的,直接将内容原模原样的替换进去。typedef是在编译时处理的,它的作用是在一个作用域中给一个已经存在的类型起别名。
#define INT_PTR int* 是用INT_PTR代替int*
typedef int* int_ptr 是用int_ptr代替int*
但是有所不同,如上所说,#define在预处理时进行简单的替换,而typedef不是简单替换 ,它采用如同定义变量的方法那样来声明一种类型。
INT_PTR a,b;//相当于int * a, b; 所以b不是指针类型,只是简单的宏替换.
int_ptr c,d ; //c, d 都为指向int的指针,即把int_ptr定义为int型指针,编译阶段会把c,d都识别为指针。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值