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