typedef与#define宏区别

  • 先让我们了解一下typedef的功能,typedef简单来说就是给类型取一个别名

    如  typedef int New   那么int就有一个别名叫New了,以后size就和int这个类型一共用法了。

     但如果仅仅认为typedef是把第一个参数(类型名)等同于第二个参数就太单纯了,他还有更复杂化的用法:

    typedef char LINE[81] 它真的含义是LINE代表了81个元素的字符数组;那么 LINE t 就等同于char t[81];

     还可以举一个函数指针的例子,如下:

1 typedef int (*func_ptr)(int,int);  //typedef行
2 
3 int (*fp)(int,int);  //原型行
4 func_ptr fp;         //应用行,与原型行实现的功能完全一样

    首先,“typedef行”和“原型行”相比较,前者仅仅多了一个typedef而已;就函数指针的例子而言,他们俩的根本区别在于func_ptr是类的别名,fp是这个类一个具体的变量。

    其次,“应用行”和“原型行”编译结果是完全一样的。就函数指针而言,他们都是创建了一个类型为 int (*)(int,int)的函数指针fp。可是func_ptr fp  比   int (*fp)(int,int) 形式更

    加简单,便于书写和理解。形势越复杂,typedef的优势越明显。


  • typedef与#define宏区别

  与typedef不同,#define只是单纯的替换,,替换发生在预编译的过程,此时可以吧#define的每个参数看成一堆字母,#define只是将一堆字母傻傻的用领一堆字母替换。

#define dpChar char *
typedef char * tpChar;
dpChar p1,p2;
tpChar p3,p4;

  这么里貌似#define和typedef想干的都是同一件事——用一个新的名字替换点 char *;首先要注意书写顺序上,两者还是有区别的,#define是将新定义的名词变量放在

  第一个参 数,把已有的参数或者类型名放于后面第二个参数,其实这个也很好连向,以前定义数学符号π时常用   #define PI 3.14159  来进行声明。

  我们再来看结果:dpChar是#define定义的,按照替换原则,替换结果为 char *p1,p2;等价于定义了char *p1;char p2;此时p1是char *类型,p2是char类型

  tpChar是typedef给char *取的别名,此时定义出的p3、p4类型都是char *

  

  

posted @ 2018-10-25 15:29  爱吃砂糖橘的白龙  阅读(781)  评论(0编辑  收藏  举报