define与typedef
程序员文章站
2022-03-15 22:25:35
...
今天遇到一个有关于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都识别为指针。