zoukankan      html  css  js  c++  java
  • typedef 详解

    一行很常用的代码:

    typedef int XX_Size_Check[(sizeof(XX)==64)? 1:-1];
    

    很容易猜到上面这行代码是要在编译时检查XX的size,但再深究点,我们就会发现它跟我们平时typedef的写法不太一致。

    typedef用法小结

    对已有类型定义别名

    typedef <old type name> <new alias>;
    

    这是最常见的写法,主要用途有

    • 结构体

    举个例子,我们这里定义了一个结构体MyStruct,在C里面,如果要定义该类型的变量,则需要写struct关键字。(C++里在不产生歧义的情况下可以省略。)

    struct MyStruct {
        int data1;
        char data2;
    };
    struct MyStruct a;
    

    我们可以使用typedef来简化书写:

    typedef struct MyStruct newtype;
    
    newtype a;
    

    当然也可以直接写成这样:

    typedef struct MyStruct {
        int data1;
        char data2;
    } newtype;
    

    或者更简单的:

    typedef struct {
        int data1;
        char data2;
    } newtype;
    
    
    • 指针
    typedef struct Node* NodePtr;
    ...
    NodePtr startptr, endptr, curptr, prevptr, errptr, refptr;
    

    函数指针

    不使用typedef,我们会这样写:

    int do_math(float arg1, int arg2) {
        return arg2;
    }
     
    int call_a_func(int (*call_this)(float, int)) {
        int output = call_this(5.5, 7);
        return output;
    }
     
    int final_result = call_a_func(&do_math);
    

    使用typedef:

    typedef int (*MathFunc)(float, int);
     
    int do_math(float arg1, int arg2) {
        return arg2;
    }
     
    int call_a_func(MathFunc call_this) {
        int output = call_this(5.5, 7);
        return output;
    }
     
    int final_result = call_a_func(&do_math);
    

    这里typedef后面跟了一个函数指针类型 int (*MathFunc)(float, int),通过这个语句,MathFunc成为该函数指针类型的别名。

    数组

    typedef int vector[10];
    
    vector a;
    a[9] = 100;
    

    和函数指针比较类似,typedef后面跟了一个数组类型(元素类型为int,数组长度为10),通过这个语句,vector成为该数组类型的别名。
    也可以定义多维数组。

    参考:

    Wikipedia: typedef

    Jason Damon: 使用typedef语句定义数组类型

  • 相关阅读:
    手把手教你接入微信支付
    Java中的深浅拷贝问题,你清楚吗?
    DeimosC2 源码阅读
    一行命令删除空的docker images
    docker build出现交互式时区设置解决
    Amass项目源码阅读(整体架构)
    Prometheus时序数据库-磁盘中的存储结构
    Prometheus时序数据库-内存中的存储结构
    解Bug之路-ZooKeeper集群拒绝服务
    日常Bug排查-Nginx重复请求?
  • 原文地址:https://www.cnblogs.com/garcia-0/p/4564020.html
Copyright © 2011-2022 走看看