typedef 与 #define的区别

141 阅读2分钟

我为什么要写这篇文章?

  • 我想主要还是在于两个方面吧。第一,大一时偷懒没好好学c语言,导致功底薄弱,现在在这两个关键字上产生困惑;第二,希望把今晚想明白的地方记录下来,以便后续若有疑惑可回头查阅。

我的困惑之处?

//#define
#define ptr_c char*
ptr_c a,b;  //等价于 char* a; char b;

//typedef
typedef char* ptr_c;
ptr_c a; b; //等价于char* a; char* b;
  • 看上边的代码,我疑惑的是:#definetypedefptr_c a,b;语句为何等价出来的并不相同。

typedef 与 #define的区别

  • 就在刚刚,我好像明白了这两个的区别,他们的区别就在于typedef是给数据类型起别名,而#define是简单的替换。
//typedef
typedef char* ptr_c;
//上面语句指出,char*的别名为ptr_c

//#define
#define ptr_c char*
//上面语句指出,在下面出现的所有ptr_c全都替换成char*
  • 好像还没说明白,我的表达能力堪忧呀,怎么说呢?应该可以这么理解,typedef char* ptr_c;是指我新定义了一个新的数据类型ptr_c,它是一个指向char的指针,而#define ptr_c char*,是将整个代码出现的ptr_c全都用成char*替换,替换后的用法像int* a,b;,只是定义了一个指向int型的指针和int变量。
  • 综上,还是用typedef定义数据类型比#define要好。如果在这么一个场景:我希望我用新定义数据类型来声明的变量都是指向char类型的指针,但如果我用的是#define来定义新的数据类型,就会出现只有第一个变量是指向char型的指针,而其余的变量都是char型,这是我不想要的。

写在后边

  • 果然,以前逃过的课,最后还是要补回来。