zoukankan      html  css  js  c++  java
  • 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 *

      

      

  • 相关阅读:
    1012 The Best Rank (25 分)(排序)
    1011. World Cup Betting (20)(查找元素)
    1009 Product of Polynomials (25 分)(模拟)
    1008 Elevator (20 分)(数学问题)
    1006 Sign In and Sign Out (25 分)(查找元素)
    1005 Spell It Right (20 分)(字符串处理)
    Kafka Connect 出现ERROR Failed to flush WorkerSourceTask{id=local-file-source-0}, timed out while wait
    flume、kafka、avro组成的消息系统
    Java23种设计模式总结【转载】
    Java编程 思维导图
  • 原文地址:https://www.cnblogs.com/Higgerw/p/9850135.html
Copyright © 2011-2022 走看看