陷阱题记录1:宏定义与typedef之间的区别

本人不是什么聪慧的人,对于知识的掌握也不高深,难免会有跳入某些题目陷阱,记录的初衷是为了警示自己,也是知识点的再归纳,希望对你也有帮助,毕竟陷阱之所以为陷阱就是因为它成功坑过人。属于随手小记,一篇一题。

题目如下:

test.c文件中包括如下语句,文件中定义的四个变量中,是指针类型的变量为【多选】()

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

A:a       B: b       C:c      D:d


请先思考再往下看答案


答案:ACD

解析:

#define 是宏定义,发挥的功能仅仅只是替换,而非一个正经的类型,替换后变成:

int  *a,b;

由于宏仅仅只是一个单纯的替换,置换成这个格式之后。*会与a先结合,而以int类型创建一个*a的变量,这样则是创建一个int*类型的指针。这与我们平常的理解有些相悖,不过是真实的。

int e, *f;

 再往下,typedef则是实打实的类型别名,这个别名就是一个独立的类型,以这个类型进行创建变量,就相当于使用这个类型创建的变量都是这个类型的。

int* c,d;

所以,答案是ACD

总结一下:

这题犯的错误则是对宏定义和typedef区别的理解不当,宏作为文本的替换将会在细节处产生误差,这是需要今后注意的。


解析更多的是我本人的主观解析,不能保证正确!肯定有一定错误,恳请读者联系我更改!感激不尽!

QQ:2624253582

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值