一道题帮你浅浅理解一下typedef和#define的区别

题目如下
请问a,b,c,d四个变量中哪个是int类型的

#include

#define INT_PTR int*
typedef int* int_ptr;

int main()
{
	INT_PTR a, b;
	int_ptr c, d;
	return 0;
}

这个问题的关键当然是我们要清楚#define和typedef的区别啦

  • #define
    预处理指令,在编译器生成可执行程序之前的程序预编译阶段执行
    在本题中,在程序执行之后,代码中出现INT_PTR的地方都会被替换成int*
    因此程序真正执行的代码是下面这样的
#include

typedef int* int_ptr;

int main()
{
	int*  a, b;
	int_ptr c, d;
	return 0;
}

结果c语言语法便知,这里的*只会和a结合,指示a是int *类型的。因而b是int类型

这里也推荐一下比较好的代码风格——变量分开定义并及时初始化

#include

int main()
{
	int* a = NULL;
	int* b = NULL;
	return 0;
}
  • typedef
    类型重定义,给通俗易懂的就是给类型取别名
    这里把int* 取别名叫int_ptr,就和int、float这种c语言规定的类型一样,以后出现int_ptr就代表类型int* ,这是紧密一体的

举例

  • int c,d;
    定义的c,d都是int类型的,不会出现第二种情况
  • int_ptr c,d;
    定义的c,d都是int*类型的
    等同于int *c,*d;
    不过这种写法就不是好的代码风格了

你可能感兴趣的:(c语言,#,刷题,c语言)