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 *

      

      

  • 相关阅读:
    jvm调优监控工具jps、jstack、jmap、jhat、jstat使用详解
    JS中Date和时间戳转换
    HashMap源码窥探
    HashMap,TreeMap,LinkedHashMap的默认排序
    hibernate-delete(Entity)的顺序问题
    macOS通过ssh使用PEM登录
    SpringMvc-<context:component-scan>使用说明
    macOS安装RZ,SZ
    CentOS6.8下yum安装Nginx
    第K人||约瑟夫环(链表)
  • 原文地址:https://www.cnblogs.com/Higgerw/p/9850135.html
Copyright © 2011-2022 走看看