zoukankan      html  css  js  c++  java
  • c语言define和typedef区别和使用

      define完全可以理解替换,typedef代表别名。听着差不多的意思,那2者区别在哪?

      先来个简单例子查看基本使用。

    //define和typedef区别
    #define DB double  //替换  define 被替换的内容 替换的内容
    typedef double db; //别名  typedef 原来的类型名 新的别名
    //typedef需要分号 ,typeof 去掉以后符合语法规则,define去掉就会报错
     
    void main()
    {
         //看不出区别
         DB d1 = 1.2,d2=1.8; //等价 double d1 = 1.2,d2=1.8;
         db d3 = 1.9,d4=2.3; //等价  double d3 = 1.9,d4=2.3;
     
         printf("%f,%f",d1,d2);
         printf("
    %f,%f",d3,d4);
     
    }

      上面唯一看出的区别就是typedef需要分号。

      通过指针变量来测试2者的区别

    #define DP double *
    typedef double * dp;
    
    void main2()
    {
        DP dp1,dp2; //DP是替换,等价 double *dp1,dp2; //dp1是指针占4个字节,dp2就是double类型数据8字节
        dp dp3,dp4; //都是4字节的指针, 等价于 dobule *dp3,*dp4;
    
        printf("%d,%d", sizeof(dp1),sizeof(dp2));  //4,8
        printf("
    %d,%d",sizeof(dp1),sizeof(dp2)); //4,4
    }

      通过上面例子可以看出define完全就是替换,typedef则不同。

      最后简单说明下,利用利用define和typedef构建函数指针 

     1 void print(int num)
     2 {
     3     printf("时间%d",num);
     4 }
     5 
     6 void main()
     7 {
     8     //函数指针
     9     void(*p)(int num) = print;
    10     p(10);
    11 }

      但是像上面第9行代码那样写多了会觉得很烦啊,可以使用define和typedef来构建

     1 //typedef int* pint; //给int类型指针别名
     2 typedef void(*p)(int num); //给函数指针类型别名 ,p是类型的别名
     3 #define Pprint(X) void(*X)(int num) //带参数的宏模式
     4 
     5 void main()
     6 {
     7     //函数指针
     8 
     9     //利用typedef
    10     p p1 = print;
    11     p1(10);
    12 
    13     //利用define
    14     Pprint(p2) = print;
    15     p2(33);
    16 }
  • 相关阅读:
    报错注入验证sqli
    pycharm out of memory 闪退
    集群、分布式、负载均衡区别与联系
    如何获取线程池ThreadPoolExecutor正在运行的线程
    docker快速安装mysql
    基于guava实现本地缓存
    NIO selector 多路复用reactor线程模型
    网络编程之NIO
    网络编程之BIO
    反射性能研究,反射赋值与set方法赋值对比
  • 原文地址:https://www.cnblogs.com/loveyouyou616/p/5757680.html
Copyright © 2011-2022 走看看