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语句定义数组类型

  • 相关阅读:
    Extjs知识点汇总
    div设置滚动条内容任然显示不全
    win7 系统安装 docker
    docker常用命令
    cargo实现自动化部署远程jetty容器(非安全模式)
    win7 失去焦点解决方案
    jeecms 评论相关
    jeecms v8 网站访问量配置
    python——进程池
    python多进程编程常用到的方法
  • 原文地址:https://www.cnblogs.com/garcia-0/p/4564020.html
Copyright © 2011-2022 走看看