• 结构体


    1 结构体定义与声明

    1.1 定义结构体类型和声明结构体变量

    struct Node{
        int data;
        struct Node *next
    };     //定义一个结构体类型
    
    struct Node node2;    //声明一个结构体变量

    1.2 定义结构体类型并声明结构体变量

    struct Node{
        int data;
        struct Node *next
    }node2;     //定义一个结构体类型,并声明一个结构体变量

    1.3 使用typedef定义结构体类型并声明结构体变量

    typedef struct Str_Node{
        int data;
        struct Node *next
    }Node;     //定义一个结构体类型,并将struct Str_Nodechng 重命名为 Node,后面声明结构体变量时可以直接使用Node ***
    
    Node node2;    //声明一个结构体变量,相当于struct Str_Node node2
    struct Str_Node node1    //声明一个结构体变量 如果不用这种方式,那么Str_Node也可以省略掉

    2 结构体四字节对齐

    1 案例一

    struct Str_node{
        char a;    //4字节 
        int b;    //1字节 
        char c;    //8字节 
    }str_node;
    struct Str_node str_node;
    len = sizeof(str_node);  //12, a和c各补齐后面的三个字节,形成四字节对齐
    a
    b
    a

    2 案例二

    struct Str_node{
        char a;    //4字节 
        char b;    //1字节 
        int c;    //8字节 
    }str_node;
    struct Str_node str_node;
    len = sizeof(str_node);  //8, a和b占用2个字节,再补齐后面2个字节,形成四字节对齐
    a b
    c

    3 案例三

    struct Str_node{
        char a;    //4字节
        char b;    //4字节 
        char c;    //4字节 
        char d;    //4字节 
        char e;    //1字节 
        int f;    //8字节 
    }str_node;
    struct Str_node str_node;
    len = sizeof(str_node);  //12, a,b,c,d共占4个字节,d补齐后面3个字节,形成四字节对齐
    a b c d
    e
    f

    4 总结

    一般默认是四字节对齐,如果想节省内存不需要四字节对,可以在定义结构体之前加入以下伪指令:

    #pragma pack(1)     //设置1字节对齐
  • 相关阅读:
    PPT_标题
    产品需求撰写-架构图
    测试
    SparkLauncher 1.6 版本bug
    Github fork同步
    Maven 配置远程仓库
    Sqoop2中传入配置文件中url之【坑】
    Spark性能优化-coalesce(n)
    面试算法题目
    Git 基本概念及常用命令
  • 原文地址:https://www.cnblogs.com/Mike2019/p/12558858.html
Copyright © 2020-2023  润新知